为了账号安全,请及时绑定邮箱和手机立即绑定

关于在python3.7当中的语法错误!

关于在python3.7当中的语法错误!

繁星点点滴滴 2019-02-20 02:48:36
我按照下面的代码执行后显示这样的错误。class Game(object): top_score = 0 @staticmethod def __init__(self, player_name): self.player_name = player_name @staticmethod def show_help(): print("帮助信息:让僵尸进入大门") @classmethod def show_top_score(cls): print("历史记录 %d" % cls.top_score) def start_game(self): print("开始游戏啦..." % self.player_name) Game.show_help() Game.show_top_score() game = Game("小明") game.start_game() 错误显示: D:PY001venvScriptspython.exe D:/PY001/cards_main.py帮助信息:让僵尸进入大门Traceback (most recent call last):历史记录 0 File "D:/PY001/cards_main.py", line 25, in <module> game = Game("xiaoming") TypeError: __init__() missing 1 required positional argument: 'player_name' Process finished with exit code 1 请问怎么样修改才能解决这样的问题呢?
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

class class Game(object):
    @staticmethod    # python的init应该是一个实例对象,你这样声明表示一个静态对象,应该删除
    def __init__(self, player_name): 
        ...
  1. @staticmethod:下面的函数代表普通函数,也就是说传入的第一个参数不是实例本身,所以你实例化的时候,"xiaoming"是传送给第一个变量self的,而不是player_name的;
  2. 不加这个修饰符号时,第一个对象是实例本身,也就是说,在实例化时,系统就已经传送了实例本身给self参数,而你传送的"xiaoming"是给了player_name
查看完整回答
反对 回复 2019-03-01
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

要么去掉__init__上的@staticmethod,要么去掉__init__的参数self

查看完整回答
反对 回复 2019-03-01
?
暮色呼如

TA贡献1853条经验 获得超9个赞

你用 @staticmethod 把 __init__方法 变成了静态方法。
可以简单的理解为,静态方法是定义在类内部的函数,和类无关。
而__init__方法,在类进行实例化的时候会执行,所以你的"小明" 是传给了self,而你的 player_name 并没有赋值。

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 698 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信