所以我试着写一个基于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)我必须使用什么作为第一个参数?
发布于 2014-10-15 23:44:52
在……里面
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)注意: python命名约定:对类使用CapCase,对变量和函数使用all_lower,对伪常量使用ALL_UPPER,并且优先使用描述性名称而不是缩写(除非缩写本身就是一个“描述性”名称)。
当然,如果wojok实例应该具有与“标准”Character不同的行为(您省略了它,因为它在这里不相关),子类化是一个合适的解决方案;)
https://stackoverflow.com/questions/26386644
复制相似问题