理解类中的python变量范围

时间:2010-09-21 16:04:40

标签: python syntax methods call

我正在尝试在类中定义一个变量,然后可以从该类中的函数访问/更改该变量。

例如:

class MyFunctions():
    def __init__( self):
        self.listOfItems = []

    def displayList( self):
        """Prints all items in listOfItems)"""
        for item in self.listOfItems:
            print item

    def addToList(self):
        """Updates all mlb scores, and places results in a variable."""
        self.listOfItems.append("test")

f = MyFunctions()
f.addToList
f.displayList

这应该为我输出列表中的所有项目,但它不会显示任何内容。我假设这是因为我没有正确设置变量的范围。我希望能够从MyFuctions中的所有函数中访问和更改listOfItems。

我一直试图解决这个问题几个小时,所以任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:6)

f.addToListf.displayList不会分别调用方法addToListdisplayList。他们只是简单地评估方法(在这种情况下绑定到对象f)。添加括号以调用方法的更正版本中的方法:

class MyFunctions():
    def __init__( self):
        self.listOfItems = []

    def displayList( self):
        """Prints all items in listOfItems)"""
        for item in self.listOfItems:
            print item

    def addToList(self):
        """Updates all mlb scores, and places results in a variable."""
        self.listOfItems.append("test")

f = MyFunctions()
f.addToList()
f.displayList()

这与Ruby不同,Ruby不需要括号进行方法调用(除非在某些情况下消除歧义)。

将以下内容添加到程序的末尾是有益的:

print type(f.addToList)

这将输出如下内容:

<type 'instancemethod'>

证明这是方法引用而不是方法调用。