Почему этот простой класс Python не работает? - PullRequest
3 голосов
/ 22 октября 2009

Я пытаюсь создать класс, который получит список чисел, а затем распечатает их, когда мне нужно. Мне нужно иметь возможность сделать 2 объекта из класса, чтобы получить два разных списка. Вот что у меня пока

class getlist:   
    def newlist(self,*number):
        lst=[]
        self.number=number
        lst.append(number)

    def printlist(self):
        return lst

Извините, я не очень ясно, я немного новичок, не могли бы вы мне помочь, потому что я не знаю, что делаю неправильно Спасибо.

Ответы [ 2 ]

7 голосов
/ 22 октября 2009

В Python, когда вы пишете методы внутри объекта, вам нужно ставить перед всеми ссылками на переменные, принадлежащие этому объекту, значение self. - вот так:

class getlist:   
    def newlist(self,*number):
        self.lst=[]
        self.lst += number #I changed this to add all args to the list

    def printlist(self):
        return self.lst

Код, который у вас был ранее, создавал и изменял локальную переменную с именем lst, поэтому она могла исчезнуть между вызовами.

Также обычно делают конструктор со специальным именем __init__:

class getlist:   
    #Init constructor
    def __init__(self,*number):
        self.lst=[]
        self.lst += number #I changed this to add all args to the list

    def printlist(self):
        return self.lst

Наконец, используйте вот так

>>> newlist=getlist(1,2,3, [4,5])
>>> newlist.printlist()
[1, 2, 3, [4,5]]     
3 голосов
/ 22 октября 2009

Вы должны использовать «self.lst» вместо «lst». Без «self» это просто внутренняя переменная текущего метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...