开发者

Python newbie - Understanding class functions

If you take the following simple class:

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)

And I successfully invoke the class instance using:

as = AltString("String1")

as.append("String2")

as.append("String3")

When I then invoke the output function using as.output instead of a string being returned, I get the following instead:

unbound method AltString.output

if I call it using as.output() I get the following error:

TypeError: unbound method output() must be called with
  AltString instance as开发者_开发问答 first argument (got nothing instead)

What I am not doing right?


as is a bad variable name, it is reserved keyword in Python. don't name your variables like this. once you fix it, everything else will be alright. of course you should be doing:

alt_str.output()

edit: I was able to replicate your error messages when trying to apply output to the class: AltString.output, then: AltString.output(). You should be applying the method to the instance of the class instead.

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


'as' and 'str' are keywords, don't shadow them by defining variables with the same name.


Your example is confirmed to work as you expect in python 2.4

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

In python 2.5 it should also work, but will raise a warning about the use of as, which will become a reserved keyword in python 2.6.

I don't really understand why you obtain such error messages. If you are using python 2.6 it should probably produce a syntax error.


I ran the following code :

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() 

And it worked perfectly. The only flow I can see is that you use "as", which is a reserved keyword.


Just tried your code in Python 2.6.2 and the line

as = AltString("String1")

doesn't work because "as" is a reserved keyword (see here) but if I use another name it works perfectly.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜