der folgende Code in PythonAdd verschachtelte Attribute
def _say(x): return x
class newObject(object):
def __init__(self, **kw):
for x in kw:
self.x = kw[x]
for i in self.x:
a = self.x[i]
eval('self.x.{u}={t}'.format(u=i, t=a)) #on another note, why would setattr(self.x, i, a) not work
self.object_ret()
def object_ret(self):
return self
data = newObject(**{
'ranks':{
'one':['yhggti','aragos','raithinki'],
'two':['grythin','radios'],
'three':['riyoken','schrodinger']},
'nicknames':{
'riyoken':['theos','arahiron'],
'illogic':['harab','thing']},
'commands':{
'say':_say},
})
umreißt, wie ich weitere Attribute zu einem Objekt auf dem Ende eines anderen Attribut hinzufügen möchten. Früher habe ich es haben wie
class newObject(object):
def __init__(self, **kw):
[setattr(self, x, kw[x]) for x in kw]
self.object_ret()
wo data.nicknames >>> data.nicknames {'illogic': ['harab', 'thing'], 'riyoken': ['theos', 'arahiron']}
jetzt zurückkehren würde ich wollte ['theos', 'arahiron']
in der Lage sein zu nennen data.nicknames.riyoken und zurück, die nicht mit dem ursprünglichen Setup daher der obere Bereich arbeiten würde des Codes. Der eval('self.x.{u}={t}'.format(u=i, t=a))
Teil jedoch Fehler und gibt etwas wie File "<string>", line 1 self.x.say=<function _say at 0x030E9420> ^ SyntaxError: invalid syntax
wenn es eine Möglichkeit gibt, dies zu arbeiten, wo ich data.nicknames.riyoken oder dat.commands.say nennen würde es sehr geschätzt werden.
'setattr (self.x, ich, a)' sollte gut funktionieren. Was ist passiert, als du es versucht hast? –
17, in __init__ setattr (self.x, ich, a) AttributeError: 'dict' Objekt hat kein Attribut 'zwei' – user3723955
Ich sehe jetzt. Tatsächlich können Sie Attribute für ein dict (und viele andere eingebaute Typen) nicht setzen. –