Python TypeError:必须使用instance作为第一个参数调用unbound方法

时间:2014-10-15 15:43:09

标签: python class oop instance

所以我尝试编写一个基于终端的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)

我必须使用什么作为第一个参数?

1 个答案:

答案 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具有不同的行为(并且你省略了它,因为它在这里不相关),子类化是一个合适的解决方案;)