设置一个类属性与一个给定名称的python同时限定类
题
我想要做这样的事情:
property = 'name'
value = Thing()
class A:
setattr(A, property, value)
other_thing = 'normal attribute'
def __init__(self, etc)
#etc..........
但我似乎无法找到的参考类得到的 setattr
工作一样只是分配一个变量在类定义。我怎么可以这样做?
解决方案
您需要使用一元类为这样的:
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
其他提示
您可以做到这一点更简单:
class A():
vars()['key'] = 'value'
在与先前的答案,将该溶液起着以及与外部元类(为前,Django模型)。
这可能是因为类 A
是不完全的初始化时你做你 setattr(A, p, v)
那里。
首先要尝试将仅仅是移动settattr下来以后,你靠近 class
块,看看这样的作品,例如
class A(object):
pass
setattr(A、财产值)
否则, 这件事,伊格纳西奥刚刚说的有关元类.
所以我知道这是真的老了,也许白费口舌,连同这个试图解决我自己的问题,这可能是不可能的时间,但我的凸轮。
我意识到这一点可以在不metaclassing来完成。
在SETATTR需要和目的,访问名称和值。那么对象不是类的名字它的类,它可以具有自我实现的具体实例。
class A(object):
def __init__(self):
self.a = 'i am a accessor'
setattr(self, 'key', 'value')
a = A()
print a.a
print a.key
不隶属于 StackOverflow