определение метода внутри класса в Python - PullRequest
1 голос
/ 03 октября 2011

Я делаю свои первые шаги в программировании на Python, у меня есть класс с именем node, который содержит список node с (я думаю, что это законно) с именем sons.Я попытался создать функцию, которая возвращает длину списка, но это не удается.Вот мой код:

class node:
    name="temp"
    ID=-1
    abstract="a short description"
    text="the full description"
    sons=[]
    def sLen(none):
        print ("hello")
        return len(self.sons)

и вот ошибка:

NameError: глобальное имя 'self' не определено

, если япопытайтесь удалить себя:

NameError: глобальное имя 'self' не определено

Я явно что-то неправильно понял, но что?

Ответы [ 3 ]

3 голосов
/ 03 октября 2011
class node:
    name="temp"
    ID=-1
    abstract="a short description"
    text="the full description"
    sons=[]
    def sLen(self): # here
        print ("hello")
        return len(self.sons)

n = node()
n.sons = [1, 2, 3]
print n.sLen()
1 голос
/ 03 октября 2011

Первый аргумент метода класса - это всегда ссылка на «себя».

Возможно, вы также найдете здесь интересные ответы: Какова цель самого себя? .

Цитирование самого важного бита:

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

Если вы ищете более подробное обсуждение определения классов в python, конечно, официальная документация - это то место, с которого нужно начинать: http://docs.python.org/tutorial/classes.html.

0 голосов
/ 03 октября 2011

Вы вызвали первый аргумент метода none, а не self.

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