@wintreist

Возможно ли из класса-потомка получить класс-родитель?

@dataclass
class EjectedObjectDataFileNameAndObjectID:
    file_name: str
    object_id: int


@dataclass
class EjectedObjectDataImages:
    images: typing.List[io.BytesIO]


@dataclass
class EjectedObjectData(EjectedObjectDataImages, EjectedObjectDataFileNameAndObjectID):
    uuid: str
    position: typing.Tuple[int, int] = (0, 0)
    sorted: bool = False

У меня есть EjectedObjectData из которого я хочу получить EjectedObjectDataFileNameAndObjectID, можно ли как-то в питоне получить его из него легко?
Я конечно могу создать новый из существующего, передачей параметров, просто интересно, можно ли это сделать как-то легче?
  • Вопрос задан
  • 169 просмотров
Решения вопроса 1
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Возможно ли из класса-потомка получить класс-родитель?

Возможно, но все равно потребуется передавать атрибуты от потомка к родителю:
from dataclasses import dataclass
import typing
import io

# Определение базового класса для хранения информации о файле и ID объекта
@dataclass
class EjectedObjectDataFileNameAndObjectID:
    file_name: str  # Имя файла
    object_id: int  # ID объекта

# Определение класса для хранения изображений
@dataclass
class EjectedObjectDataImages:
    images: typing.List[io.BytesIO]  # Список изображений в формате BytesIO

# Класс, наследующий оба вышеуказанных класса и добавляющий дополнительные атрибуты
@dataclass
class EjectedObjectData(EjectedObjectDataImages, EjectedObjectDataFileNameAndObjectID):
    uuid: str  # Уникальный идентификатор
    position: typing.Tuple[int, int] = (0, 0)  # Позиция объекта (по умолчанию (0, 0))
    sorted: bool = False  # Флаг, указывающий, отсортирован ли объект (по умолчанию False)

    # Метод для создания экземпляра родительского класса из текущего экземпляра
    def to_parent(self) -> EjectedObjectDataFileNameAndObjectID:
        # Возвращаем новый экземпляр EjectedObjectDataFileNameAndObjectID,
        # используя атрибуты текущего экземпляра
        return EjectedObjectDataFileNameAndObjectID(self.file_name, self.object_id)


# Пример использования:

# Создаем экземпляр EjectedObjectData
data = EjectedObjectData(["image1", "image2"], "some_file", 123, "some_uuid")

# Получаем экземпляр родительского класса из экземпляра потомка
parent_data = data.to_parent()

# Выводим информацию о родительском классе
print(parent_data)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы