python - 什么不能打印出从其他实例属性派生的实例属性的值?
问题描述
我对 Python 很陌生,如果有人能帮助我解决我面临的这个问题,我将不胜感激。
这是我的代码:
class Player:
def __init__(self, name):
self.name = name
self.info = {}
self.info_count = len(self.info)
tom = Player("tom")
tom.info["Name"] = "tom"
tom.info["Height"] = "167cm"
print(tom.info)
print(tom.info_count)
输出
{'Name': 'tom', 'Height': '167cm'}
0
我正在尝试获取一个实例属性,该属性会自动保存我拥有的信息数量。当我在 info 变量中有 2 个信息时,为什么输出仍然为 0?谢谢!
解决方案
您首先设置info_count
为 0,但随后不再修改,您分配的值不是指向 info dict 某些属性的链接。
init -> info={} info_count=len(info)=0
info["name"] -> info={'Name':'tom'} info_count = 0
info["Height"] -> info={'Name':'tom', 'Height':'167cm'} info_count = 0
你需要的是一个 property
class Player:
def __init__(self, name):
self.name = name
self.info = {}
@property
def info_count(self):
return len(self.info)
tom = Player("tom")
tom.info["Name"] = "tom"
tom.info["Height"] = "167cm"
print(tom.info) # {'Name': 'tom', 'Height': '167cm'}
print(tom.info_count) # 2
推荐阅读
- java - 在日期字段中不能使用超过“2038”的年份:Java
- java - 如何在 Java 中运行 CMD
- powershell - Powershell在搜索字符串后返回下一个单词
- c++ - 致命错误 C1001:编译器发生内部错误。'f:\dd\vctools\编译器\cxxfe\sl\p1\c\p0io.c'
- c++ - SFML 窗口以错误的大小呈现
- mongodb - 当结果集很大时,即使使用索引,mongodb.countDocuments 也很慢
- c++ - 我想读取文本文件中的所有内容(但文本文件中只有一个双精度值),转换为双精度并返回值
- java - 将动态值作为请求正文发布
- oracle - 在oracle数据库中导入datadump
- python - “助推器”对象没有属性“分数”-准确性