所以我有2个.py文件:
FW_Engine.py
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文件都在同一目录中。
答案 0 :(得分:3)
问题在于,您尝试调用Display.Window
就像是静态方法一样(即不需要实例),但事实并非如此。由于它需要一个实例,因此缺少一个自变量(您提供的3个自变量向左移动,即self
为800
,依此类推),因此错误提示未提供Caption
。
您有2个选择:
从Window
实例调用Display
:
Display(window, button).Window(800, 600, "TestTitle")
另一种较不受欢迎的方法是将Display
实例传递给
Display.Window
:
display = Display(window, button)
Display.Window(display, 800, 600, "TestTitle")
由于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")