Вы можете передать аргументы ключевого слова в конструктор метакласса из оператора class
.Это не очень полезно, кроме как для того, чтобы произвести впечатление на людей темными возможностями Python, с которыми вы знакомы.
Ключевые слова передаются в __prepare__
, __new__
и __init__
, хотя, если вы только переопределяете__new__
, ни __init__
, ни __prepare__
не будут жаловаться на неожиданные дополнительные аргументы.
class Meta(type):
def __new__(cls, name, bases, namespace, **kwargs):
print("Got keywords in __new__: {}".format(kwargs))
return super().__new__(cls, name, bases, namespace)
def __prepare__(name, bases, **kwargs):
print("Got keywords in __prepare__: {}".format(kwargs))
return {}
class Klass(metaclass=Meta, key1=1, key2="fred"): # keywords used here!!!!
pass
Вам не нужно использовать синтаксис **kwargs
для перехвата аргументов.Вы можете назвать их явно, если хотите (хотя они могут передаваться только как ключевые слова, а не как позиционные аргументы).