在学习 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-05-30 08:51:34 +08:00 via iPhone
类方法没写 self ?
def shownametest(self): |
2
BingoXuan 2018-05-30 09:39:09 +08:00
类和实例是不同的。self 会指向对应的实例对象。在实例方法中,默认第一个参数是 self。
你的代码已经实例化一个类了,所以 ship 是一个实例对象。当调用方法没有加装饰器 @classmethod 的话,在实例中调用就会在第一个参数加上 self,所以就报错 |
3
whoami9894 2018-05-31 20:29:21 +08:00 via Android
@BingoXuan
应该是 staticmethod |
4
BingoXuan 2018-06-01 10:55:12 +08:00
@whoami9894
对,最近病了神志不清。 @ classmethod 是会传入类参数的. |