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

时间:2019-06-21 09:04:45

标签: python class attributes relationship access

首先我要道歉,以防我混淆或混淆了诸如对象,类,属性,父项,子项之类的术语。这个问题与类继承无关。

在我的主类(在此称为“父”)中,我调用一个函数,该函数返回一个对象(在此称为“子”),并将其作为属性分配给父。现在可以照常通过parent.child引用该孩子,并通过parent.child.attribute引用child属性。

我现在的目标是找到一种方法来访问所有作为父级属性的孩子的属性。从本质上讲,要将所有这些属性提升一个级别。

直观上,一种解决方案是通过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)

我现在想要的是一种聪明的方法,然后调用unchangeable(!)stub_that_returns_object“函数,但我不想使用子对象,而是希望能够访问类似的属性

p = Parent()
print(p.somestr)

...等等

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

您可以通过在父类中具有一个返回子代属性的方法来实现:

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())

另一方面,如果希望父级具有子级的属性,则还可以为父级类分配相同的属性,因为