代码之家  ›  专栏  ›  技术社区  ›  LB40

在Python中,如果初始化对象时不知道子类如何使数据成员可见?

  •  1
  • LB40  · 技术社区  · 14 年前

    这个标题有点长,但是对于熟悉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中添加一个名为father的对象变量,以便weightednode也具有此成员。问题是,我不知道什么时候初始化对象,谁将是父亲。后来我用这种方法在Treenode中设置了父亲:

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

    问题是,当我试图接近自我的时候,加权的父亲:

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

    我得到:

    AttributeError: WeightedNode instance has no attribute 'father'
    

    我以为我可以 father 通过在 TreeNode.__init__ 但我找不到什么。

    我该怎么做?

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Justin Ethier    14 年前

    您可以用默认值初始化它:

    self.father = None
    

    这样至少可以识别属性。这是有效的,因为在这一点上 father .

        2
  •  0
  •   Jon Cage    14 年前

    为了回应你对贾斯汀答案的陈述,请尝试以下方法:

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

    str()命令将获取对象的字符串表示形式,即使它是 None