首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python-3.x:在用户定义的类之间传递实时数据

Python-3.x:在用户定义的类之间传递实时数据
EN

Stack Overflow用户
提问于 2014-08-19 23:31:50
回答 1查看 28关注 0票数 1

Python新手,假设如下

代码语言:javascript
复制
class A:
   def __init__(self):
       self.X = "A"
       #init whatever I need to make this work

   def Areturn(self)
       return self.x

class B:
   def __init__(self):
       self.Y = "B"
       #initi whatever I need to make this work

   def Bset(self. sender)
       self.Y = sender

因此,现在执行以下操作:

代码语言:javascript
复制
A.x = "QQQ"
B.Bset(A.Areturn)

A.X = "ZZZ"

现在我想做的不是为了更新self.Y而调用B.Bset(A.Areturn)。换句话说,我不想每次A发生变化时都显式地“刷新”B。理想情况下,类似于隐式(在B.__init__中定义)标志的内容表示,对于此实例,如果A的值发生更改,则触发B求值。对于每个实例的给定实例,几乎就像AB之间的“依赖”关系。

关于如何做到这一点的建议?

EN

回答 1

Stack Overflow用户

发布于 2014-08-19 23:41:53

如果您希望要求A在其构造函数中接收B的实例,则可以简单地使用property装饰器来实现:

代码语言:javascript
复制
class A:
   def __init__(self, b):
       self._x = "A"
       self.b = b

   @property
   def x(self):
       return self._x

   @x.setter
   def x(self, val):
       self._x = val
       self.b.Y = val

class B:
   def __init__(self):
       self.Y = "B"

如果您想要更通用的东西(这样A就不需要在创建时知道B ),您可以提供一种方法,当A.x更改时,任何对象都可以注册并更新:

代码语言:javascript
复制
class A:
   def __init__(self):
       self._x = "A"
       self._x_listeners = []

   @property
   def x(self):
       return self._x

   @x.setter
   def x(self, val):
       self._x = val
       # Update the correct attribute for all listening objects
       for listener in self._x_listeners:
          setattr(listener[0], listener[1], val)

   def register_x_listener(self, obj, prop):
       # obj is the object to update, prop is the property on that object.
       self._x_listeners.append((obj, prop))

class B:
   def __init__(self):
       self.Y = "B"

a = A()
b = B()
a.register_x_listener(b, 'Y') # Now b.Y will be updated when a.x changes.
print(a.x)
print(b.Y)
a.x = 5 
print(a.x)
print(b.Y)

输出:

代码语言:javascript
复制
A
B
5
5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25387412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档