我不太确定这在python中是可能的(或类似的东西)。我想从作为此类属性的对象访问类的方法(或另一个对象)。
考虑以下代码:
class A():
def __init__(self):
self.b = B()
self.c = C()
def print_owner(self):
print('owner')
class B():
def __init__(self):
pass
def call_owner(self):
self.owner().print_owner()
这样b
作为类A
的对象属性可以引用A
的方法或属性吗?
或者类似地,b
是否可以访问c
?
答案 0 :(得分:11)
有可能。您可以将对A到B构造函数的引用传递给
:...
self.b = B(self)
...
class B:
def __init__(self, a):
self.a = a
因此,B.a将引用存储到其所有者A。
答案 1 :(得分:8)
可以有很多对对象B()
的引用,而不仅仅是类A
实例的引用。因此这是不可能的,因为它在您的代码中。 (好吧,您可以尝试修改程序,例如在内存中查找类A
的所有实例,然后找到其属性b
指向您的B实例的实例,但这是一个很糟糕的主意。)
您应在B
实例中显式存储对所有者的引用。
答案 2 :(得分:2)
您在这里有两个选择。更好的可能是@Sianur suggests。它是简单,有效和明确的。给那个答案一个投票。
另一种选择是让拥有者自己对它的奴才施加压力。 B
可以做类似的事情
def call_owner(self):
if hasattr(self, 'owner'):
self.owner().print_owner()
else:
print('I am free!')
同时,A
会将owner属性设置为其自身:
def __init__(self):
self.b = B()
self.c = C()
self.b.owner = self.c.owner = self
无论如何,如果您希望一个对象可以访问另一个对象,请将引用存储在可访问的位置。这里没有魔术。