【发布时间】:2023-03-10 01:50:01
【问题描述】:
我正在尝试使用装饰器向我的方法添加一个属性,以确定它是否已被调用。我不知道为什么会出现这个错误:TypeError: bet() missing 1 required positional argument: 'betsize'。
文件game.py
class Game(object):
def __init__(self):
..
@AddCalled
def bet(self, betsize):
print(betsize)
文件 addcalled.py :
class AddCalled(object):
def __init__(self, f):
self.f = f
self.called = False
def __call__(self, *args, **kwargs):
self.f(*args, **kwargs)
self.called = True
我从 Qt 信号(按钮单击)中获得下注大小。目标槽函数是 game.py 中的 bet()
文件 mainui.py
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
..
self.connect(self.ui.btnBet, SIGNAL("clicked()"), self.bet)
def bet(self):
#assuming 'game' is an instance of Game()
self.game.bet(self.ui.betLine.text())
现在每次点击下注按钮时都会出现此错误
Traceback (most recent call last):
File "/home/njl/projet/mainui.py", line 27, in bet
self.game.bet(self.ui.betLine.text())
File "/home/njl/projet/addcalled.py", line 15, in __call__
self.f(*args, **kwargs)
TypeError: bet() missing 1 required positional argument: 'betsize'
我将不胜感激。简直卡在里面了。
【问题讨论】:
-
您的代码有错误:您使用
self.f将函数存储在__init__中,但是您尝试在call中使用self.func访问它。 -
顺便注意,将属性存储在方法上只会在方法被任何实例调用时设置一次;它不会告诉您是否在
Game的给定实例上调用了bet。这是否重要取决于您打算如何使用called属性。 -
抱歉,我的代码实际上写得很好。我刚刚编辑了它@BrenBarn
-
是的,弄错了。我需要重新考虑一下。感谢以下解决方案