我有一些Python代码:
class Meta(type):
def __new__(cls, name, base, attrs):
attrs.update({'name': '', 'email': ''})
return super().__new__(cls, name, base, attrs)
def __init__(cls, name, base, attrs):
super().__init__(name, base, attrs)
cls.__init__ = Meta.func
def func(self, *args, **kwargs):
setattr(self, 'LOCAL', True)
class Man(metaclass=Meta):
login = 'user'
psw = '12345'
如何在元类中引用此元类而不在代码中指定其名称?行中没有
Meta
: cls.__init__ = Meta.func
如果有人想更改元类的名称,它将停止工作。因为有必要在这个元类中进行更改。因为我在代码中明确指定了它的名字。我认为这是不对的。但我不知道如何用另一种方式表达。
我尝试了
cls.__init__ = cls.func
,但它没有为 Man 类对象创建局部变量。 cls
指的是正在创建的类(Man
),而不是Meta
如何在元类中引用此元类而不需要 在代码中指定其名称?行中没有 Meta:cls.init = 元.func
您可以使用特殊变量名称
__class__
,例如:
cls.__init__ = __class__.__init__
否则,元类的
__init__
方法中的第一个“cls”参数将引用类的类(元类),就像常规 self
参数一样:
cls.__init__ = cls.__class__.__init__
也可以用于引用该函数。