猿问

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

我按照下面的代码执行后显示这样的错误。
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

请问怎么样修改才能解决这样的问题呢?

繁星点点滴滴
浏览 699回答 3
3回答

尚方宝剑之说

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

慕侠2389804

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

暮色呼如

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

相关分类

Python
我要回答