如何使用包含类名的字符串来引用类本身?
看到这个(不工作)例子......
class WrapperClass:
def display_var(self):
#FIXME: self.__class_name__.__name__ is a string
print self.__class__.__name__.the_var
class SomeSubClass(WrapperClass):
var = "abc"
class AnotherSubClass(WrapperClass):
var = "def"
Run Code Online (Sandbox Code Playgroud)
一个明显的错误信息:
>>> b = SomeSubClass() >>> b.display_var() Traceback (most recent call last): File "", line 1, in File "", line 4, in display_var AttributeError: 'str' object has no attribute 'the_var' >>>
谢谢!
如何使用包含类名的字符串来引用类本身?
类不是特殊的,它们只是变量中包含的值.如果你说过:
class X(object): pass
Run Code Online (Sandbox Code Playgroud)
在全局范围内,变量'X'将是对类对象的引用.
您可以使用'globals()'将当前脚本/模块的全局变量作为字典获取,因此:
classobj= globals()[self.__class__.__name__]
print classobj.var
Run Code Online (Sandbox Code Playgroud)
(locals()也可用于局部变量;在它们之间,您不应该使用可怕eval()的访问变量.)
但是大卫指出,self.__class__是已经在classobj,所以没有必要去运行有关的名字从全局变量取它; self.__class__.var很好.虽然真的:
print self.var
Run Code Online (Sandbox Code Playgroud)
这将是通常的简单方法.只要实例不用其他内容覆盖该名称,类成员就可以作为其实例的成员使用.