类变量中的Python静态继承

M1L*_*L0U 3 python oop static

在python中,有没有办法在"静态构造函数"中获取类名?我想使用继承的类方法初始化一个类变量.

class A():
    @classmethod
    def _getInit(cls):
        return 'Hello ' + cls.__name__

class B(A):
    staticField = B._getInit()
Run Code Online (Sandbox Code Playgroud)

NameError:未定义名称"B"

Mar*_*ers 6

B在完成整个class套件并创建了一个类对象之前,不会分配该名称.出于同样的原因,在__name__创建类对象之前,不会设置类的属性.

您之后必须分配该属性:

class A():
    @classmethod
    def _getInit(cls):
        return 'Hello ' + cls.__name__

class B(A):
    pass

B.staticField = B._getInit()
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用类装饰器(传递新创建的类对象)或使用元类(首先创建类对象并给出要使用的名称).