我编写了下面的python类。现在我在每个函数中重复if settings.MIXPANEL_ID:
,我想知道是否有更好的方法来编写这个类?你知道吗
class MixpanelClass:
def __init__(self):
if settings.MIXPANEL_ID:
mp = Mixpanel(settings.MIXPANEL_ID)
def mp_track_event(user_id, event, property=None):
if settings.MIXPANEL_ID:
mp.track(user_id, event, property)
def mp_people_set(user_id, property):
if settings.MIXPANEL_ID:
mp.people_set(user_id, property)
def mp_people_increment(user_id, property):
if settings.MIXPANEL_ID:
mp.people_increment(user_id, property)
def mp_people_track_charge(user_id, revenue, property):
if settings.MIXPANEL_ID:
mp.people_track_charge(user_id, revenue, property)
def mp_get_distinct_id(request):
if settings.MIXPANEL_ID:
mp_cookie_name = 'mp_' + settings.MIXPANEL_ID + '_mixpanel'
mp_cookie = request.COOKIES.get(mp_cookie_name, None)
if mp_cookie:
unquoted = unquote(mp_cookie)
dictionary = literal_eval(unquoted)
return dictionary.get('distinct_id')
可以使用类装饰器(如果需要,可以装饰单个方法):
因此:
如果
settings.MIXPANEL_ID
是False
,则MixpanelClass
类的每个用户方法和__init__
方法都将被禁用。你知道吗我要提一个建议,但是,我认为这仍然需要更多的信息从原来的海报。你知道吗
解决方案1:签入泛型方法
您可以实现一个泛型函数,在该函数中指定要调用的方法。必须将函数/方法作为参数传递给该函数
例如
然后可以使用以下代码调用此方法:
PS:我冒昧地把静态转换成标准方法。你知道吗
解决方案2:装饰师
或者,您可以定义一个装饰器并用它注释您的方法。在调用该方法之前,将调用decorator。 它将调用do check(在本例中,打印其他内容)
请参阅此处以快速介绍装饰器:Intro
如果
settings.MIXPANEL_ID
没有设置,那么拥有MixpanelClass
的实例似乎没有任何意义。这意味着类的定义现在,如果您实际拥有一个id,那么只需实例化
MixpanelClass
:相关问题 更多 >
编程相关推荐