理解类中的python变量范围

xur*_*r17 2 python methods syntax 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
Run Code Online (Sandbox Code Playgroud)

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

我一直试图解决这个问题几个小时,所以任何帮助将不胜感激.

Ric*_*ook 6

f.addToList并且f.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()
Run Code Online (Sandbox Code Playgroud)

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

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

print type(f.addToList)
Run Code Online (Sandbox Code Playgroud)

这将输出如下内容:

<type 'instancemethod'>
Run Code Online (Sandbox Code Playgroud)

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