我需要定义一个类变量,名为“class”。我想直接在类命名空间中执行此操作,而不是在类方法中执行此操作。显然,我不能直接说:
class MyClass(object):
a = 1
b = 2
class = 3
所以,我想做这样的事情:
class MyClass(object):
a = 1
b = 2
self.__dict__["class"] = 3
其中“self
”应替换为对类的引用。那么,如何从类命名空间引用一个类呢?
注意:这个问题可能看起来很做作,但它源于一个实际目标。
事实上,MyClass
是一个 Django REST Framework 序列化器,我需要在其上定义一个“类”字段,因为这个 REST 端点必须遵循特定的协议(protocol)。
有一个为序列化器定义的元类,它在类创建时调用 __new__()
,并且 __new__()
聚合在类上定义的所有字段并填充注册表与他们一起田野。因此,我必须在创建类之前定义变量class
。另请参阅:Django REST Framework: how to make verbose name of field differ from its field_name?
最佳答案
你可以这样做:
class MyClass(object):
a = 1
b = 2
vars()['class'] = 3
但是由于class
是保留关键字,那么您必须使用getattr
和setattr
来访问变量,这样class
仍然是一个字符串。
>>> m = MyClass()
>>> getattr(m, 'class')
3
关于python:如何从类变量访问class.__dict__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38325370/