Python 我是否可以将子对象属性继承到父对象属性,以便它们随着子对象的更改而更改?

Python 我是否可以将子对象属性继承到父对象属性,以便它们随着子对象的更改而更改?,python,oop,Python,Oop,假设我有两个类,父类和子类,如下所示: class Child: def __init__(self, name): self.name = name def change_name(self, name): self.name = name class Parent: def __init__(self, child): self.child = child self.childs = [child]

假设我有两个类,父类和子类,如下所示:

class Child:
    def __init__(self, name):
        self.name = name

    def change_name(self, name):
        self.name = name

class Parent:
    def __init__(self, child):
        self.child = child
        self.childs = [child]

    def new_child (self, child):
        self.childs.append[child]
        self.child = child
现在,如果我创建子对象和父对象,那么我想从父对象调用子属性,如下例所示

child = Child('Nelson')
parent = Parent(child)

# I want to access child name from the parent object

print(parent.name) # should return parant.child.name <'Nelson'>

new_child = Child('Thomas')
parent.new_child(new_child)
print(parent.name) # should return the new name <'Thomas'>

# some code that will change the name of the child object
print(parent.name) # should return the new name

但是,我的子对象有多个属性,我正在寻找一种更有效的方法将子属性继承到父对象中

您已经概述了最清晰、最易访问的方法:

  • 让父属性调用引用的子对象名称属性
另一种方法可以通过元编程实现,在元编程中,您可以截取父对象上的
\uuuu getattribute\uuuu
调用,并查看子对象是否具有hasattr,然后返回子属性


请参见此处:

您已经概述了最清晰、最容易实现的方法:

  • 让父属性调用引用的子对象名称属性
另一种方法可以通过元编程实现,在元编程中,您可以截取父对象上的
\uuuu getattribute\uuuu
调用,并查看子对象是否具有hasattr,然后返回子属性

请参见此处:

我认为“将子属性继承到父对象中”不是一个正确的术语。这里没有继承——我们有水平相关的类,而不是垂直相关的类。子级是公开的,因此我们可以继续使用间接层来访问所有属性
parent.child.foo
parent.child.baz=“qux”
,等等。如果您试图封装,这是可以的,但目前还不清楚是否需要这样做。请参阅,并在此处提供更多上下文。谢谢我不认为“将子属性继承到父对象中”是正确的术语。这里没有继承——我们有水平相关的类,而不是垂直相关的类。子级是公开的,因此我们可以继续使用间接层来访问所有属性
parent.child.foo
parent.child.baz=“qux”
,等等。如果您试图封装,这是可以的,但目前还不清楚是否需要这样做。请参阅,并在此处提供更多上下文。谢谢
class Parent:
    def __init__(self, child):
        self.child = child
        self.childs = [child]

    def new_child (self, child):
        self.childs.append[child]
        self.child = child

    @property
    def name(self):
        return self.child.name