所以我开始搞乱类和修饰符,但我似乎无法克服这个错误:TypeError:make\u sandwich()只接受2个参数(给定1个)
我试着在课余时间做所有的事情,但都奏效了。有什么办法让我的三明治机工作吗?在
class SandwichMaker:
def __init__(self):
self.sandwich = []
self.bread = "========"
self.bacon = " ~~~~~~ "
self.olives = " oooooo "
def make_sandwich(self, insides):
def add_bread():
self.sandwich.insert(0, self.bread)
insides()
self.sandwich.append(self.bread)
return add_bread
def add_bacon(self):
return self.bacon
def add_olives(self):
return self.olives
@make_sandwich
def print_sandwich(self):
for i in range(len(self.sandwich)):
print self.sandwich[i]
my_sandwich = SandwichMaker()
my_sandwich.add_olives()
my_sandwich.add_bacon()
my_sandwich.print_sandwich()
编辑:嘿,所以多亏了答案我才修好了。如果有人想买一台能正常工作的无意义三明治打印机,以下是最终版本:
^{pr2}$
当您使用这样的decorator语法时,只有函数被传递给decorator。因此
make_sandwich
只接收一个参数。但正如错误所说,只需要两个。在所以您需要将
make_sandwich
更改为只接受函数引用,而不是隐式的self
,后者是三明治实例。在一旦您这样做,您将遇到另外两个问题:从}被传递,但函数不接受任何参数。因此,您需要更改内部函数以获取implict
make_sandwich
返回的函数不接受任何参数,因此当您调用修饰的print_sandwich
时,隐式{self
。最后一个问题是修饰函数将在没有隐式self的情况下被调用。所以您需要将其称为insides(self)
来解决这个问题。在装饰者应该看起来像这样:
^{pr2}$看看下面的答案:Python class method decorator w/ self arguments?和Python decorators in classes
如果我了解您的目标,我建议采用以下(总结)方法:
相关问题 更多 >
编程相关推荐