Python 3.x 从子python3引用父属性
我有一个我认为非常简单的任务,但它变成了我质疑我所知道的关于课程的一切,公平地说,这些课程一开始并不多 我有一个父类,我想在子类中执行的计算中使用该实例的属性,该子类将从父类的init创建。然而,我似乎无法从child类中引用它们 我发现了一些从子类初始化父类的建议,然而,在我的例子中,这只是创建了一个无休止的循环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
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个属性会更长。