Calling function causes TypeError: missing 1 required positional argument: 'self'

Calling function causes TypeError: missing 1 required positional argument: 'self'

我正在尝试创建一个 Python 程序,该程序能够打开 YouTube 视频,然后跳过其中的广告。这是我拥有的:

class MusicPlayer():
    def __init__(self):
        self.driver = webdriver.Safari()
        self.driver.get("https://www.youtube.com/watch?v=suia_i5dEZc")
        sleep(7)
        skipAd = self.driver.find_element_by_class_name('ytp-ad-skip-button-container')

        def skipAdFunction(self):
            threading.Timer(3,skipAdFunction).start()
            if(skipAd.is_enabled() or skipAd.is_displayed()):
                skipAd.click()
        skipAdFunction()

但是,我不确定为什么会这样,但我一直收到此错误:

Traceback (most recent call last):
  File "aivoices.py", line 52, in <module>
    MusicPlayer()
  File "aivoices.py", line 17, in __init__
    skipAdFunction()
TypeError: skipAdFunction() missing 1 required positional argument: 'self'

它与self有关,但我确定我是否应该拥有它。有人也可以解释一下我在这种情况下是否需要它吗?

调用函数时应改为self.skipAdFunction()

或者,您可以在 class 之外定义 skipAdFunction,这样您就不必在任何地方提及 self

编辑:

根据查尔斯的评论,这是不正确的,我很抱歉。当您在 class 方法中定义了嵌套函数时,python 不会 expect/require 您拥有位置参数 self。因此,您可以这样修复它:

class MusicPlayer():
    def __init__(self):
        # stuff you had here
        def skipAdFunction():
            threading.Timer(3,skipAdFunction).start()
            if(skipAd.is_enabled() or skipAd.is_displayed()):
                skipAd.click()
        skipAdFunction()