У меня есть 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 ..
Есть ли прямой способ сделать это?