【问题标题】:Kivy/Python: missing 1 required positional argumentKivy/Python:缺少 1 个必需的位置参数
【发布时间】:2021-06-05 23:29:37
【问题描述】:

我对类/类方法以及它们的工作方式不太熟悉,而且我知道我的代码很糟糕!我想涉足 UI 的世界,所以我想用我用 Python 编写的一个简单函数来看看我是否可以用它创建一个应用程序。 (编辑:如果今天不是星期一,脚本会产生一个“:(”,如果今天是星期一,则产生一个“:)”。)(双重编辑:这是我的第一篇文章,我为我的无知道歉:编码和堆栈溢出格式。)我们有:

#!/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'

我知道这个错误是由一个类的对象的不正确实例化引起的......但根据我对“今天”的定义,我不确定这在我给定的上下文中意味着什么! (除非它与“自我”有关?)

【问题讨论】:

    标签: python class object kivy instantiation


    【解决方案1】:

    只有在编写实例方法(在类中)时才需要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)
    

    【讨论】:

    • 感谢您的快速回复!然后这给了我“TypeError:__init__() 需要 1 个位置参数,但给出了 2 个”,这让我觉得这个类仍然可能有问题?我可能完全错了
    • 您能否提供整个错误/堆栈跟踪?哪个__init__ 呼叫(来自哪个班级)?
    • File "main.py", line 30, in &lt;module&gt; \\ MyApp().run() \\ File "/Users/username/opt/anaconda3/lib/python3.7/site-packages/kivy/app.py", line 829, in run \\ root = self.build() \\ File "main.py", line 27, in build \\ return Label(z) \\ TypeError: __init__() takes 1 positional argument but 2 were given
    • 我很抱歉该评论的格式,我会尝试用 \\ 表示新行
    • 我对 kivy 不熟悉,但 text 似乎是一个仅限关键字的参数。试试这个:return Label(text=z).
    【解决方案2】:

    我知道这个错误是由一个类的对象的不正确实例化引起的......但根据我对“今天”的定义,我不确定这在我给定的上下文中意味着什么! (除非它与“自我”有关?)

    findDay 只是一个函数,与你的类无关。

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

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

    【讨论】:

      【解决方案3】:

      函数没有状态,因此它们不需要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()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-20
        • 2020-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-13
        相关资源
        最近更新 更多