我有一个变量
self.foo = 1
还有一本字典
self.foo_dict = {
'foo_key' = self.foo
}
我希望能够改变self.foo
并让它也改变self.foo_dict
。如果这是在 C 中(并且字典是一个结构),我只会使用指针。
有什么建议么?这在 Python 中可能吗?
不需要包装类!
就做self.foo
访问字典中的值的属性:
class Bar:
def __init__(self, foo_):
self.foo_dict = {}
self.foo = foo_
@property
def foo(self):
return self.foo_dict["foo_key"]
@foo.setter
def foo(self, value):
self.foo_dict["foo_key"] = value
def show(self):
print("foo={} ; foo_dict['foo_key']={}".format(
self.foo, self.foo_dict["foo_key"]))
b = Bar(1)
b.show()
b.foo = 2
b.show()
b.foo_dict["foo_key"] = 3
b.show()
查看此代码在 ideone.com 上运行 http://ideone.com/GXAbNl
属性从外部看起来就像普通的实例成员字段,但它们实际上是可以执行任何操作的自定义函数。这样两人foo(...)
方法被调用时foo
属性被访问。装饰有@property
是吸气剂和装饰者@PROPERTYNAME.setter
显然是二传手。您还可以通过简单地省略属性方法之一来限制对该属性的读或写访问。
在这里,他们将所有操作重定向到字典。这样一来,您就拥有一个简单可变变量的一个实例,但可以通过多种方式访问它。
上面的示例将产生以下输出:
foo=1 ; foo_dict['foo_key']=1
foo=2 ; foo_dict['foo_key']=2
foo=3 ; foo_dict['foo_key']=3
正如我们所看到的,无论我们更改字典中的值还是通过属性更改值,两个名称始终都指向同一个变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)