如何在元类中引用此元类而不在代码中指定其名称?

问题描述 投票:0回答:1

我有一些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

python python-3.x oop metaclass
1个回答
0
投票

如何在元类中引用此元类而不需要 在代码中指定其名称?行中没有 Meta:cls.init = 元.func

您可以使用特殊变量名称

__class__
,例如:

cls.__init__ = __class__.__init__

否则,元类的

__init__
方法中的第一个“cls”参数将引用类的类(元类),就像常规
self
参数一样:

 cls.__init__ = cls.__class__.__init__

也可以用于引用该函数。

© www.soinside.com 2019 - 2024. All rights reserved.