TypeError:缺少1个必需的位置参数:“标题”

时间:2018-12-18 15:55:42

标签: python python-3.x class

所以我有2个.py文件:

  1. FW_Engine.py

  2. test.py

在FW_Engine.py中,我有以下代码:

import pygame

pygame.init()

class Display:

  def __init__(self, window, button):
      self.window = window
      self.button = button

  def Window(self, WindowWidth, WindowHeight, Caption):
      GameDisplay = pygame.display.set_mode((WindowWidth, WindowHeight))
      pygame.display.set_caption(Caption)


  def Button(self, DisplayWindow, Position_X, Position_Y):
      GreyColor = (96, 96, 96)
      pygame.draw.rect(DisplayWindow, GreyColor, (Position_X, Position_Y, 100, 20))

在test.py上,我有以下代码:

from FW_Engine import Display
import pygame

pygame.init()

GameDisplay = Display.Window(800, 600, "TestTitle")

我一直收到此错误消息:

TypeError: Window() missing 1 required positional argument: 'Caption'

但是正如您所看到的,我将所有3个必需的参数都提供给函数调用。有什么问题吗?

编辑:两个.py文件都在同一目录中。

2 个答案:

答案 0 :(得分:3)

问题在于,您尝试调用Display.Window就像是静态方法一样(即不需要实例),但事实并非如此。由于它需要一个实例,因此缺少一个自变量(您提供的3个自变量向左移动,即self800,依此类推),因此错误提示未提供Caption

您有2个选择:

  1. Window实例调用Display

    Display(window, button).Window(800, 600, "TestTitle")
    

    另一种较不受欢迎的方法是将Display实例传递给 Display.Window

    display = Display(window, button)
    Display.Window(display, 800, 600, "TestTitle") 
    
  2. 由于Display.Window根本没有引用self,因此它可以是静态方法,因此其余代码将按原样工作:

    class Display:
        def __init__(self, window, button):
            self.window = window
            self.button = button
    
       @staticmethod
       def Window(WindowWidth, WindowHeight, Caption):
           GameDisplay = pygame.display.set_mode((WindowWidth, WindowHeight))
           pygame.display.set_caption(Caption)
    

答案 1 :(得分:1)

您的Window方法不是静态方法,它是实例方法,因此如果不实例化 Display 对象,就无法调用它。

Window方法的第一个参数是 self ,它应该引用您创建的对象,在这种情况下,它是 Display 对象。

但是实际上您没有实例化它,因此在调用Window方法时,缺少self参数,这就是为什么看到TypeError的原因。

尝试如下使用它,在创建Display对象后调用Window方法。

GameDisplay = Display(window, button).Window(800, 600, "TestTitle")
相关问题