Повторная инициализация атрибутов родительского класса во время определения дочернего класса - PullRequest
0 голосов
/ 20 февраля 2019

Я использую атрибуты класса как удобный способ сохранить общие строки, используемые в моем проекте.Родительский класс имеет атрибут main, который используется для создания других атрибутов.

В некоторых случаях необходимо использовать дочерний класс с измененным атрибутом 'main'.Как заставить дочерний класс запускать инициализацию атрибутов родительского класса для не переопределенных атрибутов?

По сути, я хочу, чтобы этот код работал:

class One:
    MAIN_ATTR = 'one'
    COMPOSED_ATTR = ' '.join([MAIN_ATTR, 'composed'])


class Two(One):
    MAIN_ATTR = 'two'

assert Two.COMPOSED_ATTR == 'two composed'

1 Ответ

0 голосов
/ 20 февраля 2019

Вы можете использовать метакласс для создания атрибутов родительского и дочернего классов:

#!/usr/bin/python3.6


class Composer(type):
    def __new__(cls, name, bases, attrs):
        attrs['COMPOSED_ATTR'] = ' '.join([attrs['MAIN_ATTR'], 'composed'])
        return super(Composer, cls).__new__(cls, name, bases, attrs)


class One(metaclass=Composer):
    MAIN_ATTR = 'one'


class Two(One):
    MAIN_ATTR = 'two'


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