可以在Python中返回实例化器吗?

ack*_*ack 1 python oop

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对象?如果不是,我很好奇,有没有语言支持这个?

Chr*_* B. 7

要回答这个问题,没有,有没有办法1子实例知道包含它引用的类.常见的2来处理这种方式是:

class Parent(object):
    def __init__(self):
        self.child = Child()
        self.child._parent = self
Run Code Online (Sandbox Code Playgroud)

1当然,这并非完全正确.正如另一位评论员指出的那样,您可以从方法中的执行代码中提取堆栈帧__init__,并在当前执行的帧之前检查该帧f_localsself变量的字典.但这很复杂,容易出错.非常不推荐.

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)