我想做这样的事情:
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。 我无法将任何新变量传递给函数,因为在实现中这是一个由其他人编写的类,更改输入变量意味着更改了很多东西。
有人可以帮忙吗?
答案 0 :(得分:1)
由于您似乎在B
构造函数中构造了A
实例,因此请为B
实例提供对A
实例的引用:
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实现中,有时可以使用here查找实例,但正如文档所述,应该避免使用它“用于除了调试“:
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
来电会找到__dict__
个实例的A
;这可能是dict
类型;然后我们浏览引用self
的词典的所有对象,如果其中任何一个类型为A
,并且其属性b
的值为is self
,我们返回那个对象。
因此,条款print(a.b.getA() is a)
将打印为真。
但严重的是,请不要使用此代码。