Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 从子python3引用父属性_Python 3.x_Parent Child - Fatal编程技术网

Python 3.x 从子python3引用父属性

Python 3.x 从子python3引用父属性,python-3.x,parent-child,Python 3.x,Parent Child,我有一个我认为非常简单的任务,但它变成了我质疑我所知道的关于课程的一切,公平地说,这些课程一开始并不多 我有一个父类,我想在子类中执行的计算中使用该实例的属性,该子类将从父类的init创建。然而,我似乎无法从child类中引用它们 我发现了一些从子类初始化父类的建议,然而,在我的例子中,这只是创建了一个无休止的循环 class User(object): def __init__(self, a, b): self.a = a self.b = b self.chi

我有一个我认为非常简单的任务,但它变成了我质疑我所知道的关于课程的一切,公平地说,这些课程一开始并不多

我有一个父类,我想在子类中执行的计算中使用该实例的属性,该子类将从父类的init创建。然而,我似乎无法从child类中引用它们

我发现了一些从子类初始化父类的建议,然而,在我的例子中,这只是创建了一个无休止的循环

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

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

继承不是出路。继承是指您希望重用许多属性和方法,并重新实现其中一些属性和方法。就像两级车和卡车一样,都是从一级车继承下来的

你对父子关系的描述更像是所有权。类用户拥有一些子对象作为属性,您希望子对象从其所有者处访问数据。您需要做的是将所有者父对象的引用传递给子对象

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)

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

用户有一个属性Child。子级应具有与用户相同的属性。所以一个孩子应该有一个孩子。这个孩子应该有个孩子,谁应该有个孩子,谁应该有个孩子。。。。我猜你明白无休止的循环。子级是否应该只从用户继承属性a和b?这是完美的。非常感谢。只是一个关于效率的快速问题:如果我希望Child能够访问父类的10个属性,而父类有100个属性,那么创建一个方法来收集要传递给子类的10个属性是更好的,还是可以传递整个父类,即使我只使用了其中的一些属性?我想我是在问,传递整个类会让Python更慢吗?您只传递一个对父类的引用,而不是一个副本,所以它根本不会慢下来。复制这10个属性会更长。