class GameCharacter(object):
__name = ""
__health = 0
__experience = 0
def __init__(self, name, health, experience):
self.__name = name
self.__health = health
self.__experience = experience
def getName(self):
return self.__name
def adventure( e ):
self.__experience += e
def __str__(self):
return self.__name+ " is a " + str(type(self)) + " with: \n HEALTH: " \
+ str(self.__health) + " and EXPERIENCE: " + str(self.__experience)
gc = GameCharacter("gc", 10, 20)
print(gc)
class Wizard(GameCharacter):
__spells = {}
__knowledge = 0
def __init__(self, name, health, experience, spells, knowledge):
super().__init__(name, health, experience)
self.__spells = spells
self.__knowledge = knowledge
def __str__(self):
return (super().__str__() + "\n SPELLS: " + str(self.__spells) \
+ " and KNOWLEDGE: " + str(self.__knowledge))
def learn( k ):
self.__knowledge += k
# This method returns damage amount which is calculated as follows:
# select a random spell from the dictionary of spells using
# the knowledge value as the range, damage = potency of spell
def castSpell():
#?????
pass
class Warrior(GameCharacter):
__weapons = {}
__skill = 0
def __init__(self, name, health, experience, spells, skill):
pass
def __str__(self):
return "This needs to be implemented..."
#this method updates the value of __skill by s
def train( s ):
pass
# This method returns damage amount which is calculated as follows:
# select a random weapon from the dictionary of weapons using
# the skill value as the range, damage = strength of weapon
def useWeapon():
pass
wiz1 = Wizard("Wizzy", 100, 50, {}, 5 )
print(wiz1)
warr1 = Warrior("Warry", 100, 75, {}, 10)
print (warr1)
class AdventureGame():
#initializes the game characters
def __init__(self, wizard, warrior):
pass
#returns a string representing information about the game characters
def __str__(self):
pass
#generates a random number in range 0-5 for wizard: wizard gains knowledge by this much
#generates a random number in range 0-5 for warrior: warrior gains strength by this much
def adventure(self):
pass
#generates a random number in range 0-5 for wizard: wizard loses knowledge by this much
#generates a random number in range 0-5 for warrior: warrior loses strength by this much
def peril(self):
pass
#wizard casts a spell
#warrior draws a weapon
#return the winner - who has more health, or tie --> wizard|warrior|tie
def battle(self):
pass
我尝试将此代码编译为py 2.7.11,但它提供了此输出
gc is a <class '__main__.GameCharacter'> with:
HEALTH: 10 and EXPERIENCE: 20
Traceback (most recent call last):
File "C:/Users/Muhammad Danial/Desktop/sample.py", line 76, in <module>
wiz1 = Wizard("Wizzy", 100, 50, {}, 5 )
File "C:/Users/Muhammad Danial/Desktop/sample.py", line 34, in __init__
super().__init__(name, health, experience)
TypeError: super() takes at least 1 argument (0 given)
任何人都可以指出我的错误。我认为代码中缺少一部分。可能是它是用最新版本编写的,导致了这个错误。我试图在超级中传递参数但每次都遇到一种新的错误。
答案 0 :(得分:1)
在Python2 super()
中引用cls
(类)和self
(类实例)作为参数。
看看这里:
https://stackoverflow.com/a/5066411/6654077
super()不应被视为调用基类方法的标准方法。这与Python 3.x没有变化。唯一改变的是你不需要传递参数self,cls在标准情况下,self是当前函数的第一个参数,cls是当前正在定义的类。
现在,当我在Python3中运行你的代码时,我没有错误。
答案 1 :(得分:1)
这里调用super
的正确方法是使用以下参数:
super(Wizard, self)
因为python2中的super需要参数(在python3中它可以只做super()
)
查看docs for super了解更多详情
编辑:在您的代码中,这个错误似乎重复了多次,请记住,由于同样的问题,有些东西不能正常工作。确保仅在需要时使用super
并正确使用
答案 2 :(得分:0)
此代码适用于Python 3.x。
尝试Python 3.X,或修复代码
ScriptedRecordSetWriter
到
super().__init__(name, health, experience)
2.x中的,你应该为super()的参数写'自己的类名'和'self'。