Frage

Wenn Klasse definiert Attribute durch "berechnet" Namen, wie in:

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

gibt es eine andere Art und Weise die zahlreichen Attributdefinitionen der Handhabung als durch einen exec? getattr (C, Name) funktioniert nicht, da C nicht definiert ist, während des Unterrichts Konstruktion ...

War es hilfreich?

Lösung

Wie wäre:

class C(object):
    blah blah

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

Das heißt, tut das Attribut Einstellung nach der Definition.

Andere Tipps

class C (object):
    pass

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

Wenn Sie Ihre gesamte Klasse wird „berechnet“, kann dann schlage ich die type aufrufbar. Dies ist besonders nützlich, wenn Ihre Originalbehälter war ein dict:

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

Dies würde Ihnen die gleichen Ergebnisse wie

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

Wenn sich Ihre Bedürfnisse sehr komplex sind, sollten metaclasses. (In der Tat, type ist ein metaclass =)

Was ist metaclasses für diesen Zweck verwenden?

Sehen Sie sich Frage 100003: Was für ein Metaklasse in Python ist ?.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top