以下代碼附加嵌套屬性到Python
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},
})
概述如何我想進一步屬性添加到對象上的另一屬性的末尾。我曾經有過像
class newObject(object):
def __init__(self, **kw):
[setattr(self, x, kw[x]) for x in kw]
self.object_ret()
其中data.nicknames將返回 >>> data.nicknames {'illogic': ['harab', 'thing'], 'riyoken': ['theos', 'arahiron']}
現在我希望能夠調用data.nicknames.riyoken並返回['theos', 'arahiron']
這不會與原來的設置,因此頂部工作的代碼。然而,eval('self.x.{u}={t}'.format(u=i, t=a))
部分錯誤,並給出了一些東西,如 File "<string>", line 1 self.x.say=<function _say at 0x030E9420> ^ SyntaxError: invalid syntax
如果有任何可能的方式得到這個工作,我可以調用data.nicknames.riyoken或data.commands.say它將不勝感激。
'setattr(self.x,i,a)'應該可以正常工作。當你嘗試時發生了什麼? –
17,in __init__ setattr(self.x,i,a) AttributeError:'dict'object has no attribute'two' – user3723955
我現在明白了。事實上,你不能在字典(和其他許多內置類型)上設置屬性。 –