Python新手 - 理解类函数

时间:2009-10-14 13:42:20

标签: python

如果您采用以下简单类:

class AltString:

    def __init__(self, str = "", size = 0):
        self._contents = str
        self._size = size
        self._list = [str]

    def append(self, str):
        self._list.append(str)

    def output(self):
        return "".join(self._list)

我使用:

成功调用了类实例
as = AltString("String1")

as.append("String2")

as.append("String3")

当我然后使用output而不是返回的字符串调用as.output函数时,我得到以下内容:

unbound method AltString.output

如果我使用as.output()调用它,我会收到以下错误:

TypeError: unbound method output() must be called with
  AltString instance as first argument (got nothing instead)

我做得不对?

5 个答案:

答案 0 :(得分:8)

as是一个错误的变量名,它是Python中的保留关键字。不要像这样命名你的变量。一旦你解决了,其他一切都会好起来的。当然你应该这样做:

alt_str.output()

修改:尝试将output应用于课程时,我能够复制您的错误消息:AltString.output,然后:AltString.output()。您应该将该方法应用于该类的实例。

alt_str = AltString('spam')
alt_str.output()

答案 1 :(得分:1)

'as'和'str'是关键字,不要通过定义具有相同名称的变量来遮蔽它们。

答案 2 :(得分:1)

您的示例已确认在python 2.4中正常工作

>>> from x import *
>>> as = AltString("String1")
>>> as.append("bubu")
>>> 
>>> as.output()
'String1bubu'

在python 2.5中它也应该可以工作,但会引发有关as的使用的警告,它将成为python 2.6中的保留关键字。

我真的不明白为什么你会收到这样的错误信息。如果你使用的是python 2.6,它应该会产生语法错误。

答案 3 :(得分:0)

我运行了以下代码:

class AltString:

    def __init__(self, str = "", size = 0):
        self._contents = str
        self._size = size
        self._list = [str]

    def append(self, str):
        self._list.append(str)

    def output(self):
        return "".join(self._list)


a = AltString("String1")

a.append("String2")

a.append("String3")


print a.output() 

它完美无缺。我能看到的唯一流程是你使用“as”,这是一个保留的关键字。

答案 4 :(得分:0)

刚试用Python 2.6.2中的代码和

as = AltString("String1")

不起作用,因为“as”是一个保留关键字(请参阅here)但如果我使用其他名称则效果很好。