Установка класса приписывает с именем в Python при определении класса

Я пытаюсь сделать что-то вроде этого:

property = 'name'
value = Thing()
class A:
  setattr(A, property, value)
  other_thing = 'normal attribute'

  def __init__(self, etc)
    #etc..........

Но я, может казаться, не нахожу, что ссылка на класс добирается setattr работать то же просто присвоением переменной в определении класса. Как я могу сделать это?

14
задан slybloty 14 December 2018 в 20:56
поделиться

2 ответа

Для этого вам понадобится метакласс:

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
14
ответ дан 1 December 2019 в 07:06
поделиться

Это может быть связано с тем, что класс A не полностью инициализирован, когда вы выполняете свой setattr (A, p, v) там.

Первое, что нужно попробовать, это просто переместить установщик вниз после закрытия блока class и посмотреть, работает ли это, например

class A(object):
    pass

setattr(A, property, value)

В противном случае, то, что Игнасио только что сказал о метаклассах .

8
ответ дан 1 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: