到目前为止,decorator应用于可调用函数(函数和类)。 想知道是否有一种方法可以将装饰器应用到词典中?(事实上,它可以是任何数据结构)。 我试图解决的问题大致如下: 我有很多字典,有时可能有效或无效。你知道吗
我想用一个装饰器来标记它们,比如,如下图所示…:
class Data(object):
def invalide(self):
return False
def valide(self, some_dict):
return some_dict
@Data.invalide
dict_1 = {...}
@Data.valide
dict_2 = {...}
@Data.valide
dict_3 = {...}
...
...
@Data.invalide
dict_n = {...}
…所以,当我调用some_function(dict_x)
时,它会知道根据valide
,invalide
标记做一件事或另一件事。你知道吗
我最终实现了以下目标:
In [2]: class Data(object):
...:
...: @classmethod
...: def valide(self, func):
...: #print "Data is valide."
...: return func()
...:
...: @classmethod
...: def invalide(self, func):
...: #print "Data is invalide."
...: return False
...:
In [3]: @Data.valide
...: def dict1():
...: return {"a": 1, "b": 2, "c": 3}
...:
...: @Data.invalide
...: def dict2():
...: return {"d": 4, "e": 4, "f": 6}
...:
...: def run_funct(some_dict):
...: return some_dict
...:
In [4]: print(run_funct(dict1))
...: print type(run_funct(dict1))
...:
{'a': 1, 'c': 3, 'b': 2}
<type 'dict'>
In [5]: print(run_funct(dict2))
...: print type(run_funct(dict2))
...:
False
<type 'bool'>
你可以和房地产商和装修商拼凑一些东西:
用法如下:
我不能说我会建议你这样做,但它应该能满足你的需要。你知道吗
据我所知,装饰器只能应用于可调用(函数、类等)
如果我在你的位置上,我可能会分离逻辑,在它自己的函数中决定有效/无效。你知道吗
相关问题 更多 >
编程相关推荐