TypeError:未绑定方法...实例作为第一个参数

时间:2014-03-12 00:35:02

标签: python class python-2.7 typeerror

好的,还有一个TypeError。这是我的代码:

class musssein:      
  def notwendig(self, name):
    self.name = name
    all = []                # fuer jede Eigenschaft eine extra Liste
    day = []
    time = []
    prize = []
    what = []
    kategorie = []
    with open(name) as f:
        for line in f:
            data = line.replace('\n','') #Umbruchzeichen ersetzen
            if data != ' ':             # immer nur bis zur neuen Zeile bzw. bis zum ' ' lesen
                all.append(data)        # in liste einfuegen
            else:
                kategorie.append(all.pop())
                what.append(all.pop())
                prize.append(all.pop())
                time.append(all.pop())
                day.append(all.pop())

def anzeige():
     musssein.notwendig('schreiben.txt')
     print table.Table(
        table.Column('Datum', day),
        table.Column('Kategorie', kategorie),
        table.Column('Was?', what),
        table.Column('Preis', prize, align=table.ALIGN.LEFT))

描述是德语,但它解释了你可能已经知道的内容。

当我立即开始anzeige()时,终端只显示我:

File "test.py", line 42, in anzeige musssein.notwendig('schreiben.txt') TypeError: unbound method notwendig() must be called with musssein instance as first argument (got str instance instead)

我尝试了许多可能性并阅读了很多其他主题,但我没有找到解释它的正确方法。

2 个答案:

答案 0 :(得分:0)

在调用方法

之前,必须创建(实例化)类mussein的对象
def anzeige():
    my_var = mussein()
    my_var.notwendig('schreiben.txt')

self方法的notwendig参数为my_var(mussein的一个实例)。

顺便说一句,通常类名必须以大写字母开头。所以在这种情况下它应该是Mussein

答案 1 :(得分:0)

您的方法“notwendig”期望将musssein的实例作为其第一个参数,如果在musssein实例上调用它而不是在类本身上调用它,则会透明地完成:

newinstance=musssein()
newinstance.notwendig('schreiben.txt')

相当于

newinstance=musssein()
musssein.notwendig(newinstance,'schreiben.txt')

此外,您的代码实际上并不存储文件中的信息,而是存储方法退出后立即销毁的局部变量。 您需要将方法更改为:

def notwendig(self, name):
    self.name = name
    self.all = []                # fuer jede Eigenschaft eine extra Liste
    self.day = []
    self.time = []
    self.prize = []
    self.what = []
    self.kategorie = []

在下一个函数“anzeige”中,它们需要更改为newinstance.daynewinstance.kategorie等,否则您将获得未定义的全局变量错误