Python 中的括号分配

Bracket assignment in Python

我想创建一个能够执行以下操作的 class

class Test:
    # code here

test = Test()
test["test"] = 1
test.test  # returns 1

这在 Python 中是否可以使用魔术方法(例如,不继承自 dict)?

您可以使用 getattrsetattr 覆盖 __getitem____setitem__

class Test:
    def __getitem__(self, key):
        return getattr(self, key)

    def __setitem__(self, key, value):
        setattr(self, key, value)


test = Test()
test["test1"] = 1
print(test.test1)

使用此方法,您还可以从属性中设置并从方括号运算符中获取:

test = Test()
test.test2 = 2
print(test["test2"])

如果你想在许多 classes 中使用它,那么你可以将它变成一个基础 class:

class ItemAttributes:
    def __getitem__(self, key):
        return getattr(self, key)

    def __setitem__(self, key, value):
        setattr(self, key, value)


class Test(ItemAttributes):
    pass