[英]Python decorating class
我試圖用參數裝飾一個class
,但無法讓它工作:
這是裝飾器:
def message(param1, param2):
def get_message(func):
func.__init__(param1,param2)
return get_message
我想放置裝飾器的類
@message(param1="testing1", param2="testing2")
class SampleClass(object):
def __init__(self):
pass
但這不起作用,運行此程序時出現錯誤。 有誰知道問題是什么?,我正在嘗試創建一個裝飾器來初始化具有某些值的類。
我無法弄清楚您要做什么。 如果你想用一個帶參數的裝飾器來裝飾一個類,一種方法是這樣的。
2020-09-03:
感謝 Maria-Ines Carrera 指出原始代碼實際上並沒有正確處理從其他類繼承的類,並且 user2357112 支持 Monica 提出一個可行的解決方案。
# function returning a decorator, takes arguments
def message(param1, param2):
# this does the actual heavy lifting of decorating the class
# it takes the original class, modifies it in place, and returns
# the same class
def wrapper(wrapped):
the_init = wrapped.__init__
def new_init(self):
self.param1 = param1
self.param2 = param2
the_init(self)
def get_message(self):
return "message %s %s" % (self.param1, self.param2)
wrapped.__init__ = new_init
wrapped.get_message = get_message
return wrapped
return wrapper
class Pizza(object):
def __init__(self):
print "Pizza initialization"
@message("param1", "param2")
class Pizza2(Pizza):
def __init__(self):
print "Pizza2 initialization"
super(Pizza2, self).__init__()
pizza_with_message = Pizza2()
# prints "message param1 param2"
print pizza_with_message.get_message()
這將打印以下內容:
Pizza2 initialization
Pizza initialization
message param1 param2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.