Pergunta

Ao definir atributos de classe através de nomes "calculado", como em:

class C(object):
    for name in (....):
        exec("%s = ..." % (name,...))

há uma maneira diferente de lidar com as inúmeras definições de atributos do que usando um executivo? getattr (C, nome) não funciona porque C não está definido, durante a construção de classe ...

Foi útil?

Solução

Como sobre: ??

class C(object):
    blah blah

for name in (...):
    setattr(C, name, "....")

Isto é, fazer o ajuste atributo após a definição.

Outras dicas

class C (object):
    pass

c = C()
c.__dict__['foo'] = 42
c.foo # returns 42

Se toda a sua classe é "calculada", então posso sugerir o que pode ser chamado type. Isto é especialmente útil se o seu recipiente original era um dicionário:

d = dict(('member-%d' % k, k*100) for k in range(10))
C = type('C', (), d)

Isto lhe daria os mesmos resultados que

class C(object):
    member-0 = 0
    member-1 = 100
    ...

Se suas necessidades são realmente complexo, considere metaclasses. (Na verdade, type é a metaclass =)

Que tal usar metaclasses para este fim?

Confira 100003: O que é uma metaclasse em Python? .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top