Добавление динамических вложенных атрибутов и функций - PullRequest
0 голосов
/ 18 октября 2019

У меня есть enum и базовый класс, как показано ниже:

class Groupings(enum):
    Artist = 1,
    Composer = 2,
    ...

class Record(object):
    pass

Я пытаюсь сделать следующее: создать динамический список вложенных атрибутов для каждого значения перечисления, связанного с Record класс. Например, если у меня есть эти функции:

def get_artists(object):
    return {'Artist1': 1481, 'Artist2': 1482, 'Artist3': 1504}

def get_composers(object):
    return {'Composer1': 'C1840', 'Composer2': 'C1402', 'Composer3', 'C0140'}

def get_artist_history(artist_id, start_date, end_date):
    return pd.DataFrame()

def get_composer_history(composer_id, start_date, end_date):
    return pd.DataFrame()

Сначала я бы хотел связать перечисления с классом Record:

Record.Artist
Record.Composer  etc..

Для setattr, дляДля каждого из имен перечисления я хотел бы установить вторичный атрибут следующим образом, вызвав соответствующий get_artists или get_composers:

Record.Artist.Artist1
Record.Artist.Artist2
Record.Artist.Artist3 ..
Record.Composer.Composer1
Record.Composer.Composer2 .. and so on.

Наконец, я хотел бы присоединить метод get_artist_historyвсем Artist с на втором уровне атрибута artist и всем get_composer_history методам всех Composer с. Мне удалось вложить один уровень, используя setattr, но вложенные уровни и передача правильных artist_id в конечные функции выглядят сложнее.

Record.Artist.Artist1.get_artist_history(1481, datetime(2018,1,1), datetime(2019,1,1))
Record.Artist.Artist2
Record.Artist.Artist3 ..
Record.Composer.Composer1.get_composer_history('C1840', datetime(2018,1,1), datetime(2019,1,1))
Record.Composer.Composer2 ..

Есть ли прямой способ сделать это?

...