添加动态嵌套属性和函数

2024-10-03 19:19:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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_artistsget_composers来设置如下二级属性:

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

最后,我想将get_artist_history方法附加到artist属性的第二级中的所有Artist以及所有Composer的所有get_composer_history方法。我能够使用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 ..

有没有直截了当的方法


Tags: getdatetimedatereturn属性objectartistdef