在不传递Self的情况下从类实例获取属性


from pynput.mouse import Listener, Button
class ClickListener:
def __init__(self):
self.ClickTimes = 0
self.CurrentClick = 0
self.ClickPositions = []
def on_click(x, y, button, pressed):
if pressed and button == Button.middle:
ClickPositions.append((x,y))
self.CurrentClick += 1
if self.ClickTimes <= self.CurrentClick:
return Falses
def getClicks(self, nr):
self.ClickPositions = []
self.CurrentClick = 0
self.ClickTimes = nr
with Listener(on_click = ClickListener.on_click) as listener:
listener.join()
return self.ClickPositions

在函数"On_click"上,由于是调用函数的事件,我如何访问self-atributes?我似乎无法将自我对象传递给事件。

第1版:

class ClickListener:
def __init__(self):
self.ClickTimes = 0
self.CurrentClick = 0
self.ClickPositions = []
def on_click(self, x, y, button, pressed):
if pressed and button == Button.middle:
self.ClickPositions.append((x,y))
self.CurrentClick += 1
if self.ClickTimes <= self.CurrentClick:
return Falses
def getClicks(self, nr):
self.ClickPositions = []
self.CurrentClick = 0
self.ClickTimes = nr
with Listener(on_click = self.on_click) as listener:
listener.join()
return self.ClickPositions

在这种情况下,它表示缺少一个必需的参数,即"按下"的参数。

您可以使用这样的东西。

from pynput.mouse import Listener, Button
class ClickListener:
def __init__(self):
self.ClickTimes = 0
self.CurrentClick = 0
self.ClickPositions = []
@classmethod
def on_click(cls, x, y, button, pressed):
if pressed and button == Button.middle:
cls.ClickPositions.append((x,y))
cls.CurrentClick += 1
if cls.ClickTimes <= cls.CurrentClick:
return Falses
@classmethod
def getClicks(cls, nr):
cls.ClickPositions = []
cls.CurrentClick = 0
cls.ClickTimes = nr
with Listener(on_click = cls.on_click) as listener:
listener.join()
return cls.ClickPositions

最新更新