Kivy/Python:缺少 1 个必需的位置参数

Kivy/Python: missing 1 required positional argument

我不太熟悉 classes/class 方法及其工作原理,而且我知道我的代码很糟糕!我想涉足 UI 的世界,所以我想使用我在 Python 中编写的一个简单函数,看看我是否可以用它创建一个应用程序。 (编辑:如果今天不是星期一,脚本会生成一个“:(”,如果今天是星期一,则会生成一个“:)”。)(双重编辑:这是我的第一个 post,我为我的无知回复:编码以及 Stack Overflow 格式化。)我们有:

#!/usr/bin/env python                                                                                                          
from kivy.app import App
from kivy.uix.label import Label
import datetime
from datetime import date
import calendar


today = date.today().strftime('%Y-%d-%m')
def findDay(self, today):
    day = datetime.datetime.strptime(today, '%Y-%d-%m').weekday()
    y = (calendar.day_name[day])
    if y == 'Monday':
        x = ':)'
        return x
    else:
        x = ':('
        return x
    print(x)



class MyApp(App):
    def build(self):
        today = date.today().strftime('%Y-%d-%m')
        z = findDay(today)
        return Label(z)

if __name__ == "__main__":
    MyApp().run()

出现错误:

Traceback (most recent call last):
   File "main.py", line 30, in <module>
     MyApp().run()
   File "/Users/myusernamehere/opt/anaconda3/lib/python3.7/site-packages/kivy/app.py", line 829, in run
     root = self.build()
   File "main.py", line 26, in build
     z = findDay(today)
 TypeError: findDay() missing 1 required positional argument: 'today'

我知道这个错误是由于 class... (除非它与“自我”有关?)

I know this error arises from incorrect instantiation of an object of a class... but based on how I have defined "today", I am unsure what this means in my given context! (Unless it has to do with "self"?)

findDay只是一个函数,跟你的class没有关系。

正如您定义的那样,它有两个参数,您将其命名为 selftoday。当你调用它时,你只传递了一个参数(绑定到名称 self,第一个参数),因此你得到一个错误,你没有传递 1 个必需的位置参数,那个名为 today.

由于该函数不依赖于与您的 class 相关的任何内容,我猜您的意思是它只是一个普通函数,您应该删除 self 参数,因为它没有任何用途.

只有在编写实例方法时(在class中)才需要self。 对于正常功能,您不需要在签名中使用 self

这应该可以正常工作:

def findDay(today):
    day = datetime.datetime.strptime(today, '%Y-%d-%m').weekday()
    y = (calendar.day_name[day])
    if y == 'Monday':
        x = ':)'
        return x
    else:
        x = ':('
        return x
    print(x)

函数没有状态,因此它们不需要 self 作为参数。

#!/usr/bin/env python                                                                                                          
from kivy.app import App
from kivy.uix.label import Label
import datetime
from datetime import date
import calendar

today = date.today().strftime('%Y-%d-%m')
def findDay(today):                            # Changed here
    day = datetime.datetime.strptime(today, '%Y-%d-%m').weekday()
    y = (calendar.day_name[day])
    if y == 'Monday':
        x = ':)'
        return x
    else:
        x = ':('
        return x
    print(x)

class MyApp(App):
    def build(self):
        today = date.today().strftime('%Y-%d-%m')
        z = findDay(today)
        return Label(z)

if __name__ == "__main__":
    MyApp().run()