Введите метод, который возвращает новый экземпляр, используя метод класса суперкласса.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Введите метод, который возвращает новый экземпляр, используя метод класса суперкласса.

Сообщение Anonymous »

Код: Выделить всё

from typing import Self, Union

class Superclass:
@classmethod
def from_dict(cls, dict_: dict[str, str]) -> Self:
return cls(**dict_)

class Subclass(Superclass):
def __init__(self, name: Union[str, None] = None):
self.name = name

def copy(self) -> Self:
return Subclass.from_dict({'name': self.name})
Я получаю сообщение об ошибке в нижней строке.

Тип «Подкласс» не может быть присвоен типу возврата «Self». @Subclass"

Я тоже пробовал

Код: Выделить всё

from typing import Type, TypeVar, Union, Dict

T = TypeVar('T', bound='Superclass')

class Superclass:
@classmethod
def from_dict(cls: Type[T], dict_: dict[str, str]) -> T:
return cls(**dict_)

class Subclass(Superclass):
def __init__(self, name: Union[str, None] = None):
self.name = name

def copy(self: T) -> T:
return self.from_dict({'name': self.name})
но это выдает ошибку

Невозможно получить доступ к атрибуту "имя" для класса "Суперкласс*"   Атрибут " имя" неизвестно


Как я могу использовать метод класса суперкласса для создания экземпляра дочернего класса внутри метод дочернего класса?

Подробнее здесь: https://stackoverflow.com/questions/793 ... lassmethod
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»