объявление пустого члена класса в python - PullRequest
4 голосов
/ 18 декабря 2009

Я пытаюсь прочитать файл древовидной структуры в Python. Я создал класс для хранения объектов дерева. Один из членов должен содержать родительский объект. Поскольку элемент parentObject имеет тот же тип, что и сам класс, Мне нужно объявить это как пустую переменную типа «я».

Как мне это сделать в python?

Большое спасибо за вашу помощь.

Ответы [ 3 ]

6 голосов
/ 18 декабря 2009

В Python вы не объявляете переменные как имеющие какой-либо тип. Вы просто назначаете им. Одной переменной можно назначать объекты разных типов подряд, если вы захотите это сделать. «self» - это не тип, а соглашение об именах, используемое для ссылки на текущий объект, например «this» в Java / C ++ (кроме Python вы можете называть его как угодно).

5 голосов
/ 18 декабря 2009

Я предполагаю, что для корневого узла вам нужен такой объект. Гораздо более Pythonic сказать:

self.parent = None

в вашем корневом объекте, чем для создания пустого объекта типа self.__class__. Для каждого другого объекта узла в дереве self.parent должен ссылаться на фактический родительский узел.

Помните, в Python у вас нет «переменных», у вас есть объекты, и нет необходимости, чтобы self.parent был одинакового типа во всех экземплярах класса.

4 голосов
/ 18 декабря 2009

Поскольку элемент parentObject имеет того же типа, что и сам класс, я нужно объявить это как пустое переменная типа "self".

Нет, вам не нужно ничего объявлять в Python. Вы просто определяете вещи.

И self - это не тип, а обычное имя для первого параметра методов экземпляра, которое устанавливается языком для объекта метода.

Вот пример:

class Tree(object):

    def __init__(self, label=None):
        self.label = label
        self.parent = None
        self.children = []

    def append(self, node):
        self.children.append(node)
        node.parent = self

А вот как это можно использовать:

empty_tree = Tree()

simple_tree = Tree()
simple_tree.append(Tree('hello'))
simple_tree.append(Tree('world'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...