В Python, как сделать элементы данных видимыми для подклассов, если не известно при инициализации объекта?

1

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

Я новичок в 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

До сих пор, я думаю, что я в порядке. Теперь я хочу добавить объектную переменную, называемую отцом в 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
Лучший ответ

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

self.father = None

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

  • 0
    Я забыл упомянуть, что уже сделал это и получил: `print 'Имя% s Отец% s'% (self.name, self.father.name) AttributeError: У объекта 'NoneType' нет атрибута 'name'`
  • 0
    дерьмо, это потому, что это не было инициализировано, когда я достиг этой точки программы. правильно ?
Показать ещё 3 комментария
0

В ответ на ваше выражение о Джастине ответьте:

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

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

  • 0
    Почему это поможет? Просто во время выполнения оператора print self.father все еще отсутствует ...
  • 0
    Это остановит сбой приложения. Я согласен, что это не решает основную проблему, хотя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню