覆盖从 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()
我想为 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()