python - 了解类内的 python 变量范围

标签 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。

我已经尝试解决这个问题几个小时了,因此我们将不胜感激。

最佳答案

f.addToListf.displayList 不会分别调用 addToListdisplayList 方法。它们只是对方法本身进行求值(在本例中绑定(bind)到对象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'>

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

关于python - 了解类内的 python 变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3762197/

相关文章:

class - 在 CoffeeScript 中,在类级别声明的实例属性可以引用其定义中的另一个实例属性吗?

go - 试图将文字转换为 Golang 中的指针

ruby - Ruby 中的管道符号是什么意思?

python - PyQt 中信号处理程序会内存泄漏吗?

python - 在 Python 2.7 中模拟按键事件

python - 循环子图

javascript - 我必须遵循哪些规则才能编写不带分号的有效 Javascript?

java - 如何修复未注释的主要方法?

javascript - 方法运行时创建 Vue 组件/元素

python - 拟合sklearn后如何获取标签的有序列表