引用来自child的父属性 - python3

时间:2015-08-29 21:01:23

标签: python-3.x parent-child

我认为这是一项相当简单的任务,但它已经变成了我质疑我所知道的关于类的所有内容(事实上它不是很开始)。

我有一个父类,我希望在子类中使用该实例的属性,该子类将从父类的 init 创建。但是,我似乎无法从儿童班中引用它们。

我已经从子类中找到了对 init 父类的一些建议,但是,这只是在我的情况下创建了一个无限循环。

class User(object):
   def __init__(self, a, b):
    self.a = a
    self.b = b
    self.child.append(Child(c=4))

class Child(User)
   def __init__(self, c):
    self.c = c + User.b
    print self.c

1 个答案:

答案 0 :(得分:0)

从代码和问题来看,我猜测Child实际上只需要访问User的某些属性,在本例中为self.b

继承不是要走的路。继承是指您希望重用许多属性和方法,并重新实现其中的一些属性和方法。像两个班级"汽车"和"卡车"将继承一个类"车辆"

您对"亲子"所描述的内容更像是所有权。类User拥有一些Child(作为属性),并且您希望Child从其所有者访问数据。您需要做的是将所有者(父母)的引用传递给孩子。

class User(object):
   def __init__(self, b):
    self.b = b
    self.child.append(Child(c=4,parent=self))

class Child(object)
   def __init__(self, c, parent):
    self.parent=parent
    self.c = c + self.parent.b
    print(self.c)

当然在这个非常简单的例子中,最明显的编程方法是在子构造函数中传递b,如下所示:

class User(object):
   def __init__(self, b):
    self.b = b
    self.child.append(Child(4,b))

class Child(object)
   def __init__(self, c, b):
    self.c = c + .b
    print(self.c)

但是对于更复杂的任务,将引用传递给父代可能更好或更必要。