Bed*_*ton 10 python python-2.7
我有一个类跟踪其他几个类.这些其他类中的每一个都需要访问特定变量的值,并且这些其他类中的任何一个也必须能够修改此特定变量,以便所有其他类可以看到更改的变量.
我尝试使用属性来完成此操作.一个例子如下:
class A:
def __init__(self, state):
self._b_obj = B(self)
self._state = state
@property
def state(self):
return self._state
@state.setter
def state(self,val):
self._state = val
@property
def b_obj(self):
return self._b_obj
@b_obj.setter
def b_obj(self,val):
self._b_obj = val
class B:
def __init__(self, a_obj):
self.a_obj = a_obj
@property
def state(self):
return self.a_obj.state
@state.setter
def state(self,val):
self.a_obj.state = val
Run Code Online (Sandbox Code Playgroud)
我希望它的工作方式如下:
>>> objA = A(4)
>>> objB = objA.b_obj
>>> print objA.state
4
>>> print objB.state
4
>>> objA.state = 10
>>> print objA.state
10
>>> print objB.state
10
>>> objB.state = 1
>>> print objA.state
1
>>> print objB.state
1
Run Code Online (Sandbox Code Playgroud)
除了最后3个命令外,一切都按照我的要求运行.他们给:
>>> objB.state = 1
>>> print objA.state
10
>>> print objB.state
1
Run Code Online (Sandbox Code Playgroud)
为什么最后3个命令返回这些值?我该如何修复它以便它们返回所需的值?
谢谢
因此,您需要做的就是让您的类继承自object:-)这为您提供了新式课程及其所有好处.
class A(object):
... # rest is as per your code
class B(object):
... # rest is as per your code
>>> objA = A(4)
>>> objB = objA.b_obj
>>> print objA.state
4
>>> print objB.state
4
>>> objA.state = 10
>>> print objA.state
10
>>> print objB.state
10
>>> objB.state = 1
>>> print objA.state
1
>>> print objB.state
1
Run Code Online (Sandbox Code Playgroud)
为什么这只适用于新式类的具体原因,从这里:
对于物体,机器在
object.__getattribute__()其中转变b.x为type(b).__dict__['x'].__get__(b, type(b)).对于课程,机器在
type.__getattribute__()其中转变B.x为B.__dict__['x'].__get__(None, B).(从"要记住的重点")
__getattribute__()仅适用于新样式类和对象
object.__getattribute__()并type.__getattribute__()拨打不同的电话__get__().
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |