建立類後,您隻需添加搜尋函數(方法):class Search: # The class does not include the search methods, at first
def __init__(self):
self.conditions = {}
def make_set_condition(option): # Factory function that generates a "condition setter" for "option"
def set_cond(self, value):
self.conditions[option] = value
return self
return set_cond
for option in ('price', 'name'): # The class is extended with additional condition setters
setattr(Search, option, make_set_condition(option))
Search().name("Nice name").price('$3').conditions # Example
{'price': '$3', 'name': 'Nice name'}
PS:此類有一個__init__()方法,該方法沒有family參數(條件設定器在運作時動态添加,但添加到類中,而不是單獨添加到每個執行個體中)。如果需要建立具有不同條件設定器的Search對象,則上述方法的以下變體起作用(__init__()方法有一個family參數):
^{pr2}$
如果您确實需要知道存儲在其中的屬性名稱的搜尋方法,隻需使用set_cond.__name__ = option # Sets the function name
(就在return set_cond之前)。在此之前,方法Search.name具有以下名稱:>>> Search.price
設定其__name__屬性後,将獲得一個不同的名稱:>>> Search.price
以這種方式設定方法名可以使涉及該方法的錯誤消息更容易了解。在