向python添加嵌套属性

2024-06-17 12:50:29 发布

您现在位置: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},
        })

概述如何将其他属性添加到另一个属性末尾的对象。我以前喜欢这样

^{pr2}$

在哪里数据.昵称会回来的 >>> data.nicknames {'illogic': ['harab', 'thing'], 'riyoken': ['theos', 'arahiron']} 现在我想打电话给你data.昵称.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.昵称.riyoken或者data.commands.say我们将不胜感激。在


Tags: 代码inselffordatareturnobjectdef
2条回答

你把一些事情弄混了。下面是一个与您的代码非常接近的工作版本:

class Attributes:
    pass

class NewObject(object):
    def __init__(self, **kw):
        for x in kw:
            attrs = Attributes()
            setattr(self, x, attrs)
            for i in kw[x]:
                a = kw[x][i]
                setattr(attrs, i, a)

我会怎么做:

^{pr2}$

这将处理任意嵌套的dict。在

为什么不在初始化类时将数据作为参数传递给它呢?所以让全班同学以字典为论据。我不确定我是否遗漏了什么。在

相关问题 更多 >