所以我尝试编写一个基于终端的RPG来学习OOP,所以我写了这段代码:
class car(object): #car is the short form of Character
def __init__(self):
self.leben = 100
self.speed = 10
self.SD = 20
def attack(self, life):
#life-= self.SD
#return life
pass
def stats(self):
print 'Leben: '
print self.leben
print 'Geschwindigkeit: '
print self.speed
print 'Schaden: '
print self.SD
class wojok(car):
def __init__(self):
super(car.__init__(self)).__init__()
self.SD = 50
C = wojok()
while True:
e = raw_input('Befehl: ')
if e == 'info':
C.stats()
elif e == 'stop':
break
现在我收到了错误:
TypeError: unbound method __init__() must be called with car instance as first argument(got nothing instead)
但是当我尝试将一个car实例作为第一个参数传递给init时,我得到错误:
TypeError: unbound method __init__() must be called with car instance as first argument(got instance instead)
我必须使用什么作为第一个参数?
答案 0 :(得分:3)
在
class wojok(car):
def __init__(self):
这一行:
super(car.__init__(self)).__init__()
应该是
super(wojok, self).__init__()
但是,如果您想要的是具有不同属性值的不同car
实例,只需将它们传递给初始值设定项(可能使用默认值):
class Character(object):
def __init__(self, leben=100, speed=10, sd=20):
self.leben = leben
self.speed = speed
self.sd = sd
然后你实例化Character
没有参数来获取默认值或指定你想要的东西,即:
default_char = Character()
special_char = Character(sd=100)
NB:python命名约定:对类使用CapCase
,对变量和函数使用all_lower
,对伪常量使用ALL_UPPER
,并且更喜欢描述性名称和缩写(除非缩写是这本身就是一个“描述性”的名字。)
当然,如果一个wojok
实例应该与“标准”Character
具有不同的行为(并且你省略了它,因为它在这里不相关),子类化是一个合适的解决方案;)