Почему аргумент ключевого слова не передается в __init_subclass__(..)Python

Программы на Python
Ответить
Anonymous
 Почему аргумент ключевого слова не передается в __init_subclass__(..)

Сообщение Anonymous »

Код:

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

class ExternalMeta(type):
def __new__(cls, name, base, dct, **kwargs):
dct['district'] = 'Jiading'
x = super().__new__(cls, name, base, dct)
x.city = 'Shanghai'
return x

class MyMeta(ExternalMeta):
def __new__(cls, name, base, dct, age=0, **kwargs):
x = super().__new__(cls, name, base, dct)
x.name = 'Jerry'
x.age = age
return x

def __init__(self, name, base, dct, age=0, **kwargs):
self.country = 'China'

class MyClass(metaclass=MyMeta, age=10):
def __init_subclass__(cls, say_hi, **kwargs):
print(f'keyword arguments are: {kwargs}')
super().__init_subclass__(**kwargs)
cls.hello = say_hi

class DerivedClass(MyClass, say_hi="hello"):
pass
это выдает:

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

Traceback (most recent call last):
File "app2.py", line 27, in 
class DerivedClass(MyClass, say_hi="hello"):
File "app2.py", line 11, in __new__
x = super().__new__(cls, name, base, dct)
File "app2.py", line 4, in __new__
x = super().__new__(cls, name, base, dct)
TypeError: __init_subclass__() missing 1 required positional argument: 'say_hi'
Из официального документа:

classmethod object.__init_subclass__(cls)
Этот метод вызывается всякий раз, когда содержащий класс является подклассом. cls — это новый подкласс. Если этот метод определен как обычный метод экземпляра, он неявно преобразуется в метод класса.
Аргументы ключевых слов, передаваемые новому классу, передаются родительскому классу __init_subclass__. Для совместимости с другими классами, использующими __init_subclass__, следует удалить необходимые аргументы ключевого слова и передать остальные базовому классу, как в:
https://docs.python.org/ 3/reference/datamodel.html#object.\_\_init_subclass\_\_

Я пытаюсь напечатать кварги, это {}, пусто, так почему же мои аргументыsay_hi, не передаются в метод __init_subclass__?
редактировать:
Я читаю больше материалы и написать статью с диаграммами и тестами о создании экземпляра и классов на Python:
https://shan-weiqiang.github.io/2023/06 ... class.html
Ссылки на статьи (включая эту страницу) включены в надеется, что это может помочь кому угодно.

Подробнее здесь: https://stackoverflow.com/questions/764 ... t-subclass
Ответить

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

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

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

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

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