覆盖从 parent class in Python 继承的多个属性

override multiple attributes inherited from parent class in Python

我想为 child class 实例中的继承属性分配不同的值。我使用的代码是

class Parent:
    def __init__(self, n=50):
        # there are multiple parent attributes like 'n'
        # I use just one to reproduce the error
        self.n = n
        
    def print_n(self):
        print('n =', self.n)
        
class Child(Parent):
    def __init__(self, a=5):
        self.a = a
        
    def print_a(self):
        print('a =', self.a)
      
son1 = Child(n=100)
son1.print_n() 

错误信息是

son1 = Child(n=100)

TypeError: __init__() got an unexpected keyword argument 'n'

实现 objective 的正确方法是什么?

我试着把 super().init() 放在 init child class 的方法根据 this 类似问题的答案,但是没有用。

您的 Child.__init__ 需要显式调用 Parent.__init__;它不会自动发生。如果您不想 Child.__init__ 必须“知道”Parent.__init__ 的参数是什么,请使用 *args 或在本例中为 **kwargs 来传递任何不存在的 kwargs ' 由 Child.__init__ 处理。

class Parent:
    def __init__(self, n=50):
        # there are multiple parent attributes like 'n'
        # I use just one to reproduce the error
        self.n = n
        
    def print_n(self):
        print('n =', self.n)
        
class Child(Parent):
    def __init__(self, a=5, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.a = a
        
    def print_a(self):
        print('a =', self.a)
      
son1 = Child(n=100)
son1.print_n()