我继续收到此错误,我完全不明白为什么,我有3个文件互相导入信息但是这个主要信息只从monster_01.py及其player.py中提取信息。
TypeError: player_attack() missing 1 required positional argument: 'self'
---主要代码---
'''Player class
Fall 2014
@author Myles Taft (mbt6)
'''
import random
import monster_01
class Player():
def __init__(self, strength = 0, player_hp = 0):
self.strength = 1
self.player_hp = 100
print(self.strength, self.player_hp)
def battle():
def player_attack(self):
print('success')
while self.enemy_hp > 0:
monster_01()
self.dice1 = random.randint(1,6)
self.dice2 = random.randint(1,6)
self.dice_sum = dice1 + dice2
self.attack = dice1 + dice2
self.decide_roll = input('Type "roll" to roll the dice:')
self.roll = print('First die:' + dice1, 'Second die:' + dice2, 'Sum of dice:' + dice_sum)
if self.roll == 2 or 4 or 6 :
print('Hit!')
self.enemy_hp == strength
print(enemy_hp)
elif self.roll == 1 or 3 or 5:
print('Miss!')
def player_block(self):
self.dice1 = random.randint(1,6)
self.dice2 = random.randint(1,6)
self.decide_roll = input('Type "roll" to roll the dice:')
self.roll = print('First die:' + dice1, 'Second die:' + dice2, 'Sum of dice:' + dice_sum)
if self.roll == 2 or 4:
print('Blocked!')
self.player_hp -= int((enemy_strength)/2)
if self.roll == 1 or 3:
self.player_hp -= int(enemy_strength)
def choice(self):
get_player_attack(get_player_attack)
self.player_choice = input('Do you attack or block?') #self.player_hp, self.strength)
if self.player_choice == 'attack':
self.player_attack()
elif self.player_choice == 'block':
self.player_block()
def get_player_attack(self):
player_attack()
choice(choice)
Player.battle()
我已经在这段代码上下了一百次,任何帮助都会非常感激。
答案 0 :(得分:4)
问题在于您的get_player_attack
方法:
def get_player_attack(self):
player_attack()
它调用player_attack
就好像它是一个独立的函数而不是另一种方法。但player_attack
是类Player
的方法,因此只能在Player
的实例上调用。
应该调用该函数:
self.player_attack()
另外,像这样的东西:
if self.roll == 2 or 4 or 6 :
只是一个等待发生的问题。它应该写成:
if self.roll in (2, 4, 6):
否则,if语句的条件将被解释为:
if (self.roll == 2) or (4) or (6):
始终评估为True
。有关详细信息,请参阅How do I test one variable against multiple values?
最后,您不应该将所有方法放在另一个名为battle
的函数中。我不知道你在这里做什么尝试,但方法定义应该在类标题下面:
class MyClass: # Class header
def method1(self): # Definition of the first method
...
def method2(self): # Definition of the next method
...
...
我真的认为阅读一些关于Python类和OOP的教程会很好。以下是一些可以帮助您入门的内容:
答案 1 :(得分:0)
目前还不清楚你在战斗中想要做什么()。您尚未定义self
参数,但您也没有使用@static装饰器来指示您希望它是静态函数。你已经在战斗中定义了player_attack,因此它不能是实例方法。语法不正确。
如果你认为battle()是一个实例方法,添加一个self参数并提供一个方法体或传递,然后使player_attack去缩进。