gpt4 book ai didi

python - 如何从Python中的属性获取对象?

转载 作者:太空宇宙 更新时间:2023-11-03 17:16:32 26 4
gpt4 key购买 nike

我想做这样的事情:

class B():
def __init__(self,c):
self.c=c
def getA(self):
#this is what I want
class A():
def __init__(self,d):
self.b = B(d)

a = A(d)

我想要的是当我表演的时候

a.b.getA()

通过属性b可以得到使用该方法的对象a。我无法将任何新变量传递给函数,因为这在实现中是其他人编写的类,更改输入变量意味着更改很多内容。

有人可以帮忙吗?

最佳答案

由于您似乎在 A 构造函数中构造了 B 实例,因此为您的 B 实例提供对 的引用一个实例:

class B():
def __init__(self, c, a):
self.c = c
self.a = a
def getA(self):
return self.a

class A():
def __init__(self, d):
self.b = B(d, self)

a = A(d)
<小时/>

某些 Python 实现下,有时可能会使用 gc.get_referrers 查找实例。 ,但正如文档所述,应避免使用它“用于调试以外的任何目的。”:

import gc

class B():
def __init__(self,c):
self.c = c

def getA(self):
for i in gc.get_referrers(self):
if not isinstance(i, dict):
continue

for j in gc.get_referrers(i):
if isinstance(j, A) and getattr(j, 'b', None) is self:
return j

return

class A():
def __init__(self,d):
self.b = B(d)

a = A(42)
print(a.b.getA() is a)

第一个 get_referrers 调用将找到 A 实例的 __dict__ ;这可能是 dict 类型;然后我们遍历字典中引用 self 的所有对象,如果其中任何一个是 A 类型,并且它具有属性 b其值是 self,我们返回该对象。

因此,子句 print(a.b.getA() is a) 将打印 true。

但是说真的,不要使用这个代码。

关于python - 如何从Python中的属性获取对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33617851/

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