当前位置: 首页 > 面试题库 >

从python中获取容器/父对象

郎增
2023-03-14
问题内容

在Python中,是否可以从Bar本身获取包含另一个对象Bar的对象(例如Foo)?这是我的意思的一个例子

class Foo(object):
    def __init__(self):
        self.bar = Bar()
        self.text = "Hello World"

class Bar(object):
    def __init__(self):
        self.newText = foo.text #This is what I want to do, 
                                #access the properties of the container object

foo = Foo()

这可能吗?谢谢!


问题答案:

传递对Bar对象的引用,如下所示:

class Foo(object):
    def __init__(self):
        self.text = "Hello World"  # has to be created first, so Bar.__init__ can reference it
        self.bar = Bar(self)

class Bar(object):
    def __init__(self, parent):
        self.parent = parent
        self.newText = parent.text

foo = Foo()

编辑:
正如@thomleo指出的那样,这可能导致垃圾回收问题。建议的解决方案位于http://eli.thegreenplace.net/2009/06/12/safely-
using-destructors-in-python/中
,看起来像

import weakref

class Foo(object):
    def __init__(self):
        self.text = "Hello World"
        self.bar = Bar(self)

class Bar(object):
    def __init__(self, parent):
        self.parent = weakref.ref(parent)    # <= garbage-collector safe!
        self.newText = parent.text

foo = Foo()


 类似资料:
  • 问题内容: 在大多数应用程序服务器上,J2EE Ejb规范禁止“手动”创建线程,因为这些资源应由服务器管理。 但是有什么方法可以从Tomcat,Glassfish,Jboss等获取线程;因此访问他们的ThreadPool? 问题答案: 您可以使用commonj WorkManager 。IBM和BEA提出了一项建议,以提供一种完成此任务的标准方法(访问容器管理的线程)。 尽管它没有包含在实际规范中

  • 问题内容: 从容器名称获取docker容器ID的命令是什么? 问题答案: 在Linux中: 或在OS X,Windows中: 您的容器名称在哪里。 如@llia Sidorenko所述,为避免产生误报,您可以使用正则表达式锚点,如下所示: 说明: 为了安静。仅输出ID 对所有人。即使您的容器未运行也能正常工作 用于过滤器。 容器名称必须以该字符串 开头 容器名称必须 结束 这个字符串

  • 从容器名称中获取Docker容器id的命令是什么?

  • 问题内容: 我有以下(嵌套)对象: 接下来,我要做的就是像这样引用子对象: 现在,我想做的就是从变量中获取对对象的引用。就像是: 这可能吗? 问题答案: 否。无法知道它来自哪个对象。 而这两个只是有同一个对象的引用。 您也可以这样做: 您现在有三个引用,和,同一个对象。它们都不是特别的。

  • 我有一个场景,从多个json文件中读取数据,并将其映射到特定的json格式。 J输出: 我试图将文件读取的输入直接映射到有效的json格式,以避免读取一个jsonObj中的所有文件,将其映射到一个对象(类)中,并在新对象中添加每个参数以创建jsonoutput。 我还希望在合并这些json内容时处理共享的可变状态,因此我使用锁(obj),进行此映射的方法是异步方法。 我正在使用JSchema生成预

  • 问题内容: 如何从容器中拉出本质上是瞬时的对象?我是否必须在容器中注册它们并注入需要类的构造函数中?将一切都注入到构造函数中感觉不好。同样,对于一个类,我也不想创建一个TypedFactory并将工厂注入到需要的类中。 我想到的另一个想法是在需要的基础上“新”它们。但是我还将Logger所有组件(通过属性)注入到我的所有类中。因此,如果我将它们更新,则必须手动Logger在这些类中实例化它们。如何