python - 在 Python 中将变量指针传递给字典
问题描述
我试图从字典上下文中更新一个类,但字典被实例化为类属性的值而不是变量的“指针”。
class SomeClass():
status = 0
new_entry = SomeClass()
print (new_entry.status) #prints 0 - expected
data_attribute ={
"status":[1407,new_entry.status,0]
}
data_attribute["status"][1] = 123
print (data_attribute["status"]) # prints 123 - expected
print (new_entry.status) # prints 0 - not desired
问题是我不知道如何将“指针”传递给类属性“状态”,以便在字典中更新它会在主类结构中更新它。我希望有一些我不明白的愚蠢或我以完全错误的方式这样做,但任何帮助将不胜感激。
解决方案
你不能在 Python 中那样做。通常的选择是存储对对象的引用并通过它来获取属性。这并不完全符合您编写代码的方式,因为 Python 中没有指针。
class SomeClass():
status = 0
new_entry = SomeClass()
print (new_entry.status) #prints 0 - expected
data_attribute ={
"status":[1407, new_entry, 0]
}
data_attribute["status"][1].status = 123
print (data_attribute["status"][1].status) # prints 123 - expected
print (new_entry.status) # prints 123 - OK
以下示例更符合您的意图,但仅旨在使某些事情变得明显:
class A:
def __init__(self):
self.status = 0
a = A()
values = dict(a=a)
pointers = values
print(pointers['a'] is a)
print(pointers['a'].status)
print(a.status)
a.status = 1
print(pointers['a'].status)
pointers['a'].status = 2
print(a.status)
请注意我如何将状态存储在实例而不是类中。实例属性在分配时隐藏类属性。
基本上,您使用 dict 的键作为指针。此外,您甚至不需要pointers
,因为这只不过是与values
.
所以实际上是 dict 键充当您想要的指针。
Python 只使用引用。任何名称都是绑定到某个对象的引用。跟踪对不可变对象的引用,例如str
或int
不会按预期工作,因为如果您在前面的代码中为它们分配新值,则会创建新对象并将其绑定到相同的引用(原始对象不能更改)。
推荐阅读
- r - 使用 staplr 在 R 中填写 pdf 字段
- python - 在使用完整堆栈跟踪记录错误时添加条目之间的分隔
- java - 为什么我的石英作业没有根据给定的 cron 表达式触发,而是每 10 分钟触发一次?
- javascript - 带有动态元素的滑下动画
- java - 如何使用 SunMSCAPI 密钥解密 RSA-OAEP
- r - pivot_wider 基于 0 或 1 的条件
- windows - Haskell,读取另一个进程的内存
- javascript - 需要帮助将回调转换为 Promise
- c# - 如何在使用 Linq 的特定 Capture.Index 之后从 MatchCollection 中获取下一个匹配项
- sql - ROUNDDOWN TIME, Power Bi