В Python, как сделать элементы данных видимыми для подклассов, если не известно при инициализации объекта? - PullRequest
1 голос
/ 02 апреля 2010

Название немного длинное, но оно должно быть довольно простым для тех, кто хорошо знает Python.

Я новичок в питоне. Так что, возможно, я делаю вещи неправильно.

Предположим, у меня есть класс TreeNode

class TreeNode(Node):
    def __init__(self, name, id):
        Node.__init__(self, name, id) 
        self.children = []

и подкласс с весом:

class WeightedNode(TreeNode):
    def __init__(self,name, id):
        TreeNode.__init__(self, name, id)
        self.weight = 0

Пока, я думаю, я в порядке. Теперь я хочу добавить объектную переменную с именем Father в TreeNode, чтобы WeightedNode также имел этот член. Проблема в том, что я не знаю при инициализации объекта, который станет отцом. Затем я установил отца с помощью этого метода в TreeNode:

def set_father(self, father_node):
    self.father = father_node 

Проблема тогда, когда я пытаюсь получить доступ к self.father в Weighted:

print 'Name %s Father %s '%(self.name, self.father.name)

Я получаю:

AttributeError: WeightedNode instance has no attribute 'father'

Я думал, что смогу сделать father видимым, делая что-то в TreeNode.__init__, но я не смог найти что.

Как я могу это сделать?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2010

Вы можете просто инициализировать его значением по умолчанию:

self.father = None

Таким образом, атрибут будет, по крайней мере, распознан. И это действительно так, поскольку на данный момент действительно нет father.

0 голосов
/ 02 апреля 2010

В ответ на ваше заявление об ответе Джастина, попробуйте это:

print ' Name %s Father %s '%(str(self.name), str(self.father.name))

Команда str () получит строковое представление объекта, даже если оно None

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