【发布时间】:2016-08-24 12:50:22
【问题描述】:
在python中,有没有办法在“静态构造函数”中获取类名?我想使用继承的类方法初始化一个类变量。
class A():
@classmethod
def _getInit(cls):
return 'Hello ' + cls.__name__
class B(A):
staticField = B._getInit()
NameError: 名称“B”未定义
【问题讨论】:
在python中,有没有办法在“静态构造函数”中获取类名?我想使用继承的类方法初始化一个类变量。
class A():
@classmethod
def _getInit(cls):
return 'Hello ' + cls.__name__
class B(A):
staticField = B._getInit()
NameError: 名称“B”未定义
【问题讨论】:
直到完整的 class 套件执行完毕并创建了类对象后,才会分配名称 B。出于同样的原因,类的__name__ 属性在创建类对象之前也不会设置。
您必须在之后分配该属性:
class A():
@classmethod
def _getInit(cls):
return 'Hello ' + cls.__name__
class B(A):
pass
B.staticField = B._getInit()
另一种方法是使用类装饰器(传递新创建的类对象)或使用元类(首先创建类对象并指定要使用的名称)。
【讨论】: