天天看點

python類動态添加方法_在Python3.0中将方法動态添加到類中

建立類後,您隻需添加搜尋函數(方法):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

以這種方式設定方法名可以使涉及該方法的錯誤消息更容易了解。在