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

标签 python oop

class Parent():
  def __init__(self):
    self.child = Child()

class Child():
  def __init__(self):
    # get Parent instance
    self.parent = self.Instantiator()

我知道这不是适当的封装,但为了兴趣...

给定一个实例化“子”对象的“父”类,是否有可能从子内部返回实例化它的父对象?如果不是,我很好奇,是否有任何语言支持此功能?

最佳答案

要回答这个问题,不,子实例不可能1知道任何包含对它的引用的类。常见的2 处理方法是:

class Parent(object):
    def __init__(self):
        self.child = Child()
        self.child._parent = self

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

关于python - 可以在 Python 中返回实例化器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3145652/

相关文章:

python - 有两个程序的 GUI 类

python - OOP——组织大类

Python GATT 服务器将 BLE 流式传输到 Windows

python - Django:如何从 django 模板中的 object_list 中索引图像

Python urllib2.Request.get_header 文档?

python - 如何从 python 中的日期时间字符串获取时区?

python - Pandas Column 中有 NaN 的地方我想用 1 替换,除了 Totals 需要对 1 求和

c# - 使用静态变量来存储全局的、不断变化的信息是一种好习惯吗?

java - 如果外部类(封闭类)和内部类具有相同名称的数据成员,那么我们如何区分它们

java - 创建支持实习的对象的良好模式?