gpt4 book ai didi

python - 有没有办法在Python中分配对对象属性的引用?

转载 作者:行者123 更新时间:2023-12-01 00:57:20 25 4
gpt4 key购买 nike

我想将一个对象的属性永久链接到另一个对象的属性,以便每当后者发生更改时,前者都会自动更新。

我尝试使用 = 进行简单赋值,但这仅在赋值时分配属性的值,而我想分配对属性本身的引用。

class firstObj:

def __init__(self,n):
self.name=n
self.inA=1

@property
def outA(self):
return self.inA+2

class secondObj:

def __init__(self,n):
self.name=n
self.inA=1

@property
def outA(self):
return self.inA*2




fo=firstObj("FO")
so=secondObj("SO")
fo.inA=so.outA

我正在尝试将 so 的输出链接到 fo 的输入

so.inA=2
-->so.outA 变为 4
-->fo.inA 变为 4
-->fo.outA 变为 6

(更常见的是,Python中有一种方法将对一个变量的引用分配给另一个变量而不是变量的值,这样a=b不会将b的值分配给a,而是对b本身的引用)

最佳答案

Python 中的变量只是一个字典映射 var name = value,如果你尝试 print(globals()) 你会注意到这一点,它会打印所有模块变量的字典映射

如果您需要实现您想要的目标,您可以在类定义中执行此操作,如下所示:

class firstObj:
def __init__(self,n, obj=None):
self.name=n
self._inA=1
self.obj = obj

@property
def inA(self):
if self.obj is not None:
self._inA = self.obj.outA
return self._inA

@property
def outA(self):
return self.inA+2


class secondObj:
def __init__(self,n):
self.name=n
self.inA=1

@property
def outA(self):
return self.inA*2


so=secondObj("SO")
fo=firstObj("FO", so)
# fo.inA=so.outA

so.inA=2
print(so.outA) # becomes 4
print(fo.inA) # becomes 4
print(fo.outA) # becomes 6

输出:

4
4
6

关于python - 有没有办法在Python中分配对对象属性的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56140539/

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