Доступ к производным атрибутам в именованном кортеже из родительского класса - PullRequest
1 голос
/ 29 мая 2019

У меня есть простой именованный кортеж, который функционирует как неизменный контейнер, который характеризует класс, который я разработал.

Из этого класса (который имеет именованный кортеж как переменную класса), я получил несколько дочерних классов, которые все переопределяют этот атрибути добавить новые поля в именованный кортеж

Я хочу сохранить поля, которые были определены в идентификаторе родительского класса, и добавить только те, которые являются новыми.Я предполагаю, что вы можете просто сохранить старый идентификатор в классе и сделать что-то вроде ID.2nd = "добавленный дочерний элемент формы". Но я бы предпочел, чтобы вы могли просто переопределить переменную идентификатора и получить доступ к ранее определенным идентификаторам через вызов super() или что-то еще

from collections import namedtuple

ID = namedtuple("myTuple", ["first", "second", "third", "fourth"])
ID.__new__.__defaults__ = ("default from parentclass", None , None , None)


class Parent(object):
    _ID = ID()

    def __init__(self, arg):
        self.arg = arg

class Child(Parent):
    #if there is a new _ID defined in Child
    #, keep the fields it adds but also add the
    #ones from the parent:
    _ID = ID(second="adding from child")
    #it should now contain the fields _ID.first == "default from parent" from parentclass
    #and _ID.second == "adding from child"

Пока это работает, но если у меня есть еще один ребенок сейчас

class Child2(Child):

    _ID = ID(third="adding from child")
    #and now something like _ID.second = super()._ID.second

Я потеряю всю информацию, которая была добавлена ​​в промежуточные классы.

...