Могу ли я наследовать свойства дочернего объекта от свойств родительского объекта, чтобы они изменялись при изменении дочернего объекта? - PullRequest
0 голосов
/ 20 сентября 2019

Предположим, у меня есть два класса, родительский и дочерний, как показано ниже:

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

в настоящее время я добавил декоратор свойства в класс Parent, который возвращает дочернее свойство

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

Однако мой дочерний объект имеет более одного свойства, и я ищуболее эффективный способ наследования дочерних свойств в родительский объект

1 Ответ

0 голосов
/ 20 сентября 2019

Вы обрисовали в общих чертах самый простой и доступный способ сделать это:

  • попросите родительское свойство вызвать свойство имени дочерних объектов, на которое есть ссылка

Другой метод может быть реализован черезметапрограммирование, где вы перехватываете __getattribute__ вызовы родителя и смотрите, если потомок hasattr, который вы бы потом возвращали дочернему свойству.

Смотрите здесь: Перехватывает вызовы методов в Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...