gpt4 book ai didi

python - 在python中让两个变量相互追踪

转载 作者:行者123 更新时间:2023-11-30 23:13:38 25 4
gpt4 key购买 nike

有两个对象(或简单变量),我希望它们能够“双向观察”或任何名称。这些值应该像这样跟踪:

# just some variables
a = 5
b = 4
track(a,b)
a = 3
print(b) --> 3
b = 6
print(a) --> 6

实际上,这些应该是两个对象的属性或两个字典的值。或者 - 两个字典的值是不同类的两个对象的一部分。

更好/更糟的是,两个(不同的)类可以使用例如__setitem__/__getitem__ 来访问值并进行额外的计算,当“兄弟”发生变化时应该触发:

class A():
def __init__(self):
self.d = {'a':3}
def __setitem__(self, key, value):
self.d[key] = value
self.do_magic_computation(key, value)

class B():
def __init__(self):
self.d = {'b':3}
def __setitem__(self, key, value):
self.d[key] = value
self.do_another_computation(key, value)


a = A()
b = B()
track(a['a'], b['b'])
a['a'] = 5
print(b['b']) --> 5 (+ magic computation happened in a and b)

我的想法如下 - 做一个圆形观察者模式和一个“跟踪器”对象,该对象将监听ab中的变化。然后它会触发“兄弟”。

有什么想法可以用一些“神奇的”Python 方法来完成这个任务吗?

最佳答案

如果您想要的只是能够以两种或多种方式引用一个可变位置,而不是使用方便的语法糖来实现相同的功能,那么您可以简单地使用 list 来实现它:

a = b = [4]
a[0] = 5
print(b[0]) --> 5

显而易见,您可以对对象属性和字典值以及其他任何内容使用相同的方法。

可以肯定的是,如果您想要的是一个真正通用的 track() 函数,与您实际描述的类似,那么这在 Python 中是不可能的,因为您无法“传递左值”来开始与。

关于python - 在python中让两个变量相互追踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29220698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com