python - 执行有界方法时未更新 Python 字典键
问题描述
我正在尝试通过订阅者/模式从 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
解决方案
推荐阅读
- ruby-on-rails - Rails + Devise:如果密码未更改,我如何收到错误消息?
- python - 关于列表迭代的问题
- bash - 如何执行存储在 Github 中的 SQL 文件?
- ios - Swift 新手,无法手动将 swift 2 转换为 swift 5
- linux - 审计日志并确定用户在 Oracle 中的操作,以及控制台中结果的设计
- c# - 使用来自 NewtonSoft 的 Json Schema Validator 示例代码并获得 400 Bad Request
- java - Java - 使用 TimerTask 杀死外部进程
- python-3.x - 如何使用 REST API 触发气流 dag(我得到“属性是只读的 - '状态'”,错误)
- stm32 - 问题编程和运行STM32F103C8
- swiftui - 创建按钮比创建文本慢吗?