在定义类时在Python中设置类属性
我想做类似这样的事情:
property = 'name'
value = Thing()
class A:
setattr(A, property, value)
other_thing = 'normal attribute'
def __init__(self, etc)
#etc..........
但是我找不到这个类的引用,导致我无法让 setattr
像在类定义中直接给变量赋值那样工作。我该怎么做呢?
4 个回答
9
这可能是因为在你执行 setattr(A, p, v)
的时候,类 A
还没有完全初始化。
你可以先试试把 setattr
移到 class
代码块结束之后再执行,看看这样是否有效,比如:
class A(object):
pass
setattr(A, property, value)
如果这样还是不行,可以看看 Ignacio 提到的关于 metaclasses 的内容。
38
你可以更简单地做到这一点:
class A():
vars()['key'] = 'value'
跟之前的回答相比,这个解决方案能很好地与外部元类配合使用(比如,Django模型)。
16
你需要使用一个元类来实现这个功能:
property = 'foo'
value = 'bar'
class MC(type):
def __init__(cls, name, bases, dict):
setattr(cls, property, value)
super(MC, cls).__init__(name, bases, dict)
class C(object):
__metaclass__ = MC
print C.foo