我按照下面的代码执行后显示这样的错误。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):
...
- @staticmethod:下面的函数代表普通函数,也就是说传入的第一个参数不是实例本身,所以你实例化的时候,"xiaoming"是传送给第一个变量self的,而不是player_name的;
- 不加这个修饰符号时,第一个对象是实例本身,也就是说,在实例化时,系统就已经传送了实例本身给self参数,而你传送的"xiaoming"是给了player_name
暮色呼如
TA贡献1853条经验 获得超9个赞
你用 @staticmethod 把 __init__方法 变成了静态方法。
可以简单的理解为,静态方法是定义在类内部的函数,和类无关。
而__init__方法,在类进行实例化的时候会执行,所以你的"小明" 是传给了self,而你的 player_name 并没有赋值。
添加回答
举报
0/150
提交
取消