python-3.x - python 3.9.4中的类在调用方法时给出不一致的属性错误
问题描述
在 Python 3.9.4 中,我构建了一个ForagerAgent
包含许多方法的类。相关代码指的是两个不同的 ForagerAgent 对象之间的信息共享。相关代码示例:
class ForagerAgent:
def __init__(self):
heatmap = {}
def receive_heatmap_knowledge(self, shared_data):
received_alternative_indices = shared_data[0]
received_alternative_data = shared_data[1]
received_counter = 0
while received_counter < len(received_alternative_indices):
# add knowledge if the alternative is unknown
received_index = received_alternative_indices[received_counter]
received_data = received_alternative_data[received_counter]
if isinstance(self.knowledge[received_index], int):
self.knowledge[received_index] = received_data
received_counter += 1
如果我从测试用例对象手动访问它,则会产生预期的结果:
from src.agents import ForagerAgent
forager_A = ForagerAgent()
forager_A.heatmap = {'stock_1': 100.0, 'stock_2': 0}
forager_A.update_list_of_knowns()
forager_B = ForagerAgent()
forager_B.heatmap = {'stock_1': 0, 'stock_2': 15}
data = forager_A.share_heatmap_knowledge() # method that yields knowledge as (['stock_1'], [100.0])
forager_B.receive_heatmap_knowledge(data)
print(forager_B.heatmap)
结果{'stock_1': 100.0, 'stock_2': 15}
如预期的那样。
但是,当在另一个对象方法中调用此方法时,例如:
class DataSharer:
def __init__(self):
pass
def share_knowledge(self, forager_a, forager_b):
data = forager_a.share_heatmap_knowledge()
forager_b.receive_heatmap_knowledge(data)
forager_a = ForagerAgent()
forager_a.heatmap = {'stock_1': 100.0, 'stock_2': 0}
forager_b = ForagerAgent()
forager_b.heatmap = {'stock_1': 0, 'stock_2': 15}
data_sharer = DataSharer()
data_sharer.share_knowledge(forager_a=forager_a, forager_b=forager_b)
它在错误和正常运行方面高度不一致。在其他一些类对象(如DataSharer
上面的示例)中,它可以正常工作,而在其他一些类对象中,它会产生一个AttributeError: 'ForagerAgent' object has no attribute 'receive_heatmap_knowlegde'
有谁知道 Python 3.9.4 中可能导致这种不一致的任何常见(人为)错误或错误AttributeError
?以及如何避免这种情况?
解决方案
推荐阅读
- laravel - 未定义密码重置器 [users]
- java - 如何使用Java在每个pdf文件中具有不同索引的两个字符串之间获取一个字符串
- angular - 从源“http://localhost:4200”访问“http://[::1]:3000/api/requests/...”处的 XMLHttpRequest 已被 CORS 策略阻止
- javascript - 来自相机的 Expo/React Native 图像路径
- python - Python:从多维numpy数组中删除随机值
- r - 如何计算列的平均值并删除 R 中的一些行?
- aws-chime-sdk - 使用 API 创建的 AWS Chime 会议 - 使用应用程序加入
- swt - SWT 标签和 Clabel 无法正确呈现“&”字符
- python - 删除特定列中具有相同值的行
- django - /admin/products/product/add/ 处的 OperationalError 没有这样的表:main.auth_user__old