Python -类-函数参数-takes 0 positional arguments but 1 was given

2018-05-30 06:56:56 +08:00
 xiaoke0718

在学习 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() ’‘’

4570 次点击
所在节点    问与答
4 条回复
Sylv
2018-05-30 08:51:34 +08:00
类方法没写 self ?
def shownametest(self):
BingoXuan
2018-05-30 09:39:09 +08:00
类和实例是不同的。self 会指向对应的实例对象。在实例方法中,默认第一个参数是 self。

你的代码已经实例化一个类了,所以 ship 是一个实例对象。当调用方法没有加装饰器 @classmethod 的话,在实例中调用就会在第一个参数加上 self,所以就报错
whoami9894
2018-05-31 20:29:21 +08:00
@BingoXuan
应该是 staticmethod
BingoXuan
2018-06-01 10:55:12 +08:00
@whoami9894
对,最近病了神志不清。 @ classmethod 是会传入类参数的.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/458821

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX