0

让我们假设这个例子:两个兄弟类,其中一个加载另一个类作为新属性,然后我希望在兄弟内部的主类中使用这个属性。

a = 2
class AN(object):
   def __init__(self,a):
       self.aplus = a + 2
       self.BECls = BE(a)


class BE(object):
   def __init__(self,a):
       print a

   def get_aplus(self):
       ????

c = AN(a)

我想做:

c.BECls.get_aplus() 

这将返回类似 self.self.aplus 的东西(隐喻),即 4

恢复:从 BE 类中的 AN 获取 aplus 属性,不声明为参数,但如果可能的话,考虑“a”变量必须已经通过 AN 加载,但会进行“反向自省”。

对不起,如果我没有说清楚,但我试图简化我的真实代码发生的事情。

我想问题可能是我在课堂上使用的技术。但不确定是什么或如何使它变得更好。

谢谢

4

1 回答 1

2

OP的问题:

从 BE 类中的 AN 获取 aplus 属性,而不声明为参数,但如果可能的话,考虑到“a”变量必须已经通过 AN 加载,请执行“反向自省”。

我们必须“反向自省”最接近的事情是通过gc.getreferrers()进行搜索。

也就是说,最好简单地明确关系

class AN(object):
   def __init__(self,a):
       self.aplus = a + 2
       self.BECls = BE(self, a)

class BE(object):
   def __init__(self, an_obj, a):
       self.an_obj = an_obj
       print a

   def get_aplus(self):
       return self.an_obj.aplus

if __name__ == '__main__':
    a = 2
    c = AN(a)
    print c.BECls.get_aplus()     # this returns 4
于 2012-04-27T04:59:11.503 回答