如何更改属性的父对象。(因此self.myobject.myattribute变成self.myattribute)

2024-04-18 07:54:36 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,如果我已经或将要混淆对象、类、属性、父项、子项等术语,我将向您道歉。这个问题与类继承无关。在

在我的主类(这里称为parent)中,我调用一个函数,该函数返回一个对象(这里称为child)并将其作为属性分配给parent。现在可以像往常一样通过父级.子级子属性通过parent.child.attribute. 在

我现在的目标是找到一种方法,将子对象的所有属性作为父对象的属性进行访问。本质上,要将所有这些属性提升一级。在

直观地说,一种解决方案是通过child.__dict__(或类似的方法)迭代子对象的所有属性,然后在父对象中动态创建与检索到的属性同名的属性。 然而,这似乎是相当低效的,我读到,动态创建变量是要避免的,如果可能的话。在

原来

def stub_that_returns_object():
    return Child()

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

class Child():
    def __init__(self):
        self.somestr= "foo"
        self.someint = 42
        self.someobj = object()

p = Parent()
print(p.child.somestr)

我现在想要的是一些聪明的方法来调用,然后是不变的(!)stub_that_返回_object“函数,但是我不想使用子对象,而是希望能够访问

^{pr2}$

……等等

我希望我有点明白了。子对象在提升其所有属性的过程中可能会被删除。在

谢谢你!在


Tags: 对象方法函数selfchild属性thatobject
1条回答
网友
1楼 · 发布于 2024-04-18 07:54:36

如果我理解正确,您希望从父类访问子属性。在

可以通过在父类中使用返回子类属性的方法来实现:

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

   def getSomestr():
        return self.child.somestr

class Child():
    def __init__(self):
        self.somestr= "foo"
        self.someint = 42
        self.someobj = object()

p = Parent()
print(p.getSomestr())

另一方面,如果希望父类拥有子类的属性,也可以为父类指定相同的属性,因为

相关问题 更多 >