【发布时间】:2021-07-08 14:49:11
【问题描述】:
我正在尝试通过订阅者/模式从 python 对象更新密钥,这是更大代码库的一部分,但我想检查我是否在这里做错了。
from dataclasses import dataclass
@dataclass
class A:
a:float=2
def mod(self,name):
self.a = name
def __hash__(self):
return hash(self.a)
class B:
x = {}
def attach(self,object):
self.x[object]= getattr(object,'mod')
def dispatch(self):
for _, val in self.x.items():
val(3)
执行时
>>>a = A()
>>>b = B()
>>>print(a.a)
>>>b.attach(a)
>>>print(b.x)
如预期:
{A(a=2): <bound method A.mod of A(a=2)>}
>>>print(b.x[a])
<bound method A.mod of A(a=2)>
然后在执行更新时
>>b.dispatch()
>>print(b.x)
{A(a=3): <bound method A.mod of A(a=3)>}
但是当密钥被验证时:
>>>print(list(b.x.keys())[0] is a)
True
当试图检索方法时
>>>print(b.x.get(a))
None
【问题讨论】:
标签: python dictionary object methods key