class Parent():
def __init__(self):
self.child = Child()
class Child():
def __init__(self):
# get Parent instance
self.parent = self.Instantiator()
Run Code Online (Sandbox Code Playgroud)
我知道这不是适当的封装,但出于利益的考虑......
给定一个实例化"Child"对象的"Parent"类,是否可以从Child内部返回实例化它的Parent对象?如果不是,我很好奇,有没有语言支持这个?
要回答这个问题,没有,有没有办法1子实例知道包含它引用的类.常见的2来处理这种方式是:
class Parent(object):
def __init__(self):
self.child = Child()
self.child._parent = self
Run Code Online (Sandbox Code Playgroud)
1当然,这并非完全正确.正如另一位评论员指出的那样,您可以从方法中的执行代码中提取堆栈帧__init__,并在当前执行的帧之前检查该帧f_locals的self变量的字典.但这很复杂,容易出错.非常不推荐.
2处理此问题的稍微好一点的方法(取决于程序的特定需求)可能是要求父级将自己传递给子级,如下所示:
class Parent(object):
def __init__(self):
self.child = Child(self)
class Child(object):
def __init__(self, parent):
self._parent = parent
Run Code Online (Sandbox Code Playgroud)