Mic*_*ael 1 python attributes operator-overloading variable-assignment magic-methods
我想创建一个能够执行以下操作的类
class Test:
# code here
test = Test()
test["test"] = 1
test.test # returns 1
Run Code Online (Sandbox Code Playgroud)
dict在Python中使用魔术方法(例如不继承自)可能吗?
您可以覆盖__getitem__并__setitem__使用getattrand setattr:
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)
Run Code Online (Sandbox Code Playgroud)
使用此方法,您还可以从属性设置并从方括号运算符获取:
test = Test()
test.test2 = 2
print(test["test2"])
Run Code Online (Sandbox Code Playgroud)
如果您想在许多类中使用它,那么您可以将其变成基类:
class ItemAttributes:
def __getitem__(self, key):
return getattr(self, key)
def __setitem__(self, key, value):
setattr(self, key, value)
class Test(ItemAttributes):
pass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
959 次 |
| 最近记录: |