433 Stimmen

Wie kann ich ein Objekt erstellen und ihm Attribute hinzufügen?

Ich möchte ein dynamisches Objekt (innerhalb eines anderen Objekts) in Python erstellen und ihm dann Attribute hinzufügen.

Ich habe es versucht:

obj = someobject
obj.a = object()
setattr(obj.a, 'somefield', 'somevalue')

aber das hat nicht funktioniert.

Irgendwelche Ideen?

bearbeiten:

Ich setze die Attribute aus einer for Schleife, in der eine Liste von Werten durchlaufen wird, z. B.

params = ['attr1', 'attr2', 'attr3']
obj = someobject
obj.a = object()

for p in params:
   obj.a.p # where p comes from for loop variable

In dem obigen Beispiel würde ich Folgendes erhalten obj.a.attr1 , obj.a.attr2 , obj.a.attr3 .

Ich habe die setattr Funktion, weil ich nicht wusste, wie man die obj.a.NAME von einer for Schleife.

Wie würde ich das Attribut auf der Grundlage des Wertes von p im obigen Beispiel?

-2voto

lmokto Punkte 131
di = {}
for x in range(20):
    name = '_id%s' % x
    di[name] = type(name, (object), {})
    setattr(di[name], "attr", "value")

-2voto

Sean Punkte 975

Frage - warum nicht stattdessen ein Wörterbuch benutzen?

obj = { "a": { "somefield" : "somevalue" } }

-3voto

Ich sehe einen anderen Weg, diesen Weg:

import maya.cmds

def getData(objets=None, attrs=None):
    di = {}
    for obj in objets:
        name = str(obj)
        di[name]=[]
        for at in attrs:
            di[name].append(cmds.getAttr(name+'.'+at)[0])
    return di

acns=cmds.ls('L_vest_*_',type='aimConstraint')
attrs=['offset','aimVector','upVector','worldUpVector']

getData(acns,attrs)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X