理解类中Python变量作用域
我正在尝试在一个类里定义一个变量,这样我就可以在这个类里的函数中访问和修改它。
比如说:
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.addToList
和 f.displayList
其实并没有真正调用 addToList
和 displayList
这两个方法。它们只是简单地表示了这些方法(在这里是和对象 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'>
这表明这是一个方法引用,而不是方法调用。