繁体   English   中英

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

[英]how to get the object from its attribute in python?

我想做这样的事情:

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实例一个对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 实现下,有时可以使用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的值为is self ,我们将返回该对象。

因此,子句print(abgetA() is a)应打印为真。

但严重的是,不要使用此代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM