如果您采用以下简单类:
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)
我做得不对?
答案 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)