Python:从字符串引用类?

Orp*_*hee 2 python

如何使用包含类名的字符串来引用类本身?
看到这个(不工作)例子......

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'
>>> 

谢谢!

bob*_*nce 9

如何使用包含类名的字符串来引用类本身?

类不是特殊的,它们只是变量中包含的值.如果你说过:

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)

这将是通常的简单方法.只要实例不用其他内容覆盖该名称,类成员就可以作为其实例的成员使用.