
在学习 Python 基础的时候,在创建某一个 shownametest()函数,解析器会报错 ‘’‘ ypeError: shownametest() takes 0 positional arguments but 1 was given ’‘’ ‘’‘ import pygame
from settings import Settings
from ship import Ship import game_functions as gf from pygame.sprite import Group
def run_game(): #初始化游戏并创建一个屏幕对象 pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_htight)) pygame.display.set_caption("Alien Invasion")
#创建一艘飞船 ship = Ship(ai_settings, screen) #创建一个用于存储子弹的编组 bullets = Group() #设置背景色 bg_color = (230, 230, 230) #开始游戏的主循环 while True: gf.check_events(ai_settings, screen, ship, bullets) ship.update() gf.update_bullets(bullets) gf.update_screen(ai_settings, screen, ship, bullets) #监视键盘和鼠标事件 for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() #每次循环时都重绘屏幕 screen.fill(ai_settings.bg_color) ship.blitme() #让最近绘制的屏幕可见 pygame.display.flip() run_game() ’‘’
1 Sylv 2018 年 5 月 30 日 via iPhone 类方法没写 self ? def shownametest(self): |
2 BingoXuan 2018 年 5 月 30 日 类和实例是不同的。self 会指向对应的实例对象。在实例方法中,默认第一个参数是 self。 你的代码已经实例化一个类了,所以 ship 是一个实例对象。当调用方法没有加装饰器 @classmethod 的话,在实例中调用就会在第一个参数加上 self,所以就报错 |
3 whoami9894 2018 年 5 月 31 日 via Android @BingoXuan 应该是 staticmethod |
4 BingoXuan 2018 年 6 月 1 日 @whoami9894 对,最近病了神志不清。 @ classmethod 是会传入类参数的. |