Я пытаюсь сделать что-то вроде этого:
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
Это может быть связано с тем, что класс A
не полностью инициализирован, когда вы выполняете свой setattr (A, p, v)
там.
Первое, что нужно попробовать, это просто переместить установщик вниз после закрытия блока class
и посмотреть, работает ли это, например
class A(object):
pass
setattr(A, property, value)
В противном случае, то, что Игнасио только что сказал о метаклассах .