Понимание области действия переменной Python в классе - PullRequest
2 голосов
/ 21 сентября 2010

Я пытаюсь определить переменную в классе, которая затем может быть доступна / изменена из функций этого класса.

Например:

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

Это должно вывести всеэлементы в списке для меня, но вместо этого он ничего не отображает.Я предполагаю, что это происходит, потому что я неправильно настроил область действия переменных.Я хочу иметь возможность получать доступ и изменять listOfItems из всех функций MyFuctions.

Я пытался выяснить это в течение нескольких часов, поэтому любая помощь будет принята с благодарностью.

1 Ответ

6 голосов
/ 21 сентября 2010

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, который не требует скобок для вызова метода (за исключением устранения неоднозначности в некоторых случаях).

Поучительно добавить следующее в конец вашей программы:

print type(f.addToList)

Это выведет что-то вроде следующего:

<type 'instancemethod'>

, демонстрирующее, что это методссылка, а не вызов метода.

...