首页 > 解决方案 > 从未传递给 __init__ 方法的类继承属性

问题描述

好的,假设我正在创建一个这样的类和一个子类:

class A:
    def __init__(self, list1=[], list2=[]):
        self.list1 = []
        self.list2 = []

class B(A):
    def __init__(self, list2=[]):
       super().__init__(list2)

但是,有没有办法像这样实现它

class A:
    def __init__(self):
        self.list1 = []
        self.list2 = []

class B(A):
    # code here to inherit list1 or list2 from class A

基本上,一种实现它的方法,因此用户不能为 list1 和 list2 提供值(它们将被初始化为空列表,用户可以稍后使用某种方法添加元素)并让 B 类从 A 类继承一个列表

我觉得除了我的解决方法之外还有其他方法可以做到这一点,但可能不是因为这是一个非常具体的问题

标签: pythonpython-3.xinheritance

解决方案


您提供的代码已经完成了您希望它执行的操作。

class A:
    def __init__(self):
        self.list1 = []
        self.list2 = []

class B(A):
    pass

b = B()

print(b.list1)  # prints []

当你继承一个类时,你继承了它的所有方法,包括__init__. 因此,A.__init__is (隐式)在初始化时调用B。大致相当于

class A:
    def __init__(self):
        self.list1 = []
        self.list2 = []

class B(A):
    def __init__(self):
        super().__init__()

这意味着(几乎)相同的事情。你永远不会为了更明确而这样做;只有当你想添加不应该有的行为时B.__init__,你才会这样做。A.__init__


推荐阅读