理解类中Python变量作用域

2 投票
1 回答
841 浏览
提问于 2025-04-16 04:25

我正在尝试在一个类里定义一个变量,这样我就可以在这个类里的函数中访问和修改它。

比如说:

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 个回答

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'>

这表明这是一个方法引用,而不是方法调用。

撰写回答