Python 中的括号分配
Bracket assignment in Python
我想创建一个能够执行以下操作的 class
class Test:
# code here
test = Test()
test["test"] = 1
test.test # returns 1
这在 Python 中是否可以使用魔术方法(例如,不继承自 dict
)?
您可以使用 getattr
和 setattr
覆盖 __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
我想创建一个能够执行以下操作的 class
class Test:
# code here
test = Test()
test["test"] = 1
test.test # returns 1
这在 Python 中是否可以使用魔术方法(例如,不继承自 dict
)?
您可以使用 getattr
和 setattr
覆盖 __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