如何解决在 Python 中使用继承时,派生类中的同名方法在父类中被错误调用
我有以下代码
class Parent(bytes):
def __init__(self,validate=True):
super().__init__()
if validate:
self.validate()
def validate(self):
print("Validation of Parent")
return self
class Derived(Parent):
def __init__(self,validate=True):
super().__init__()
if validate:
self.validate()
def validate(self):
print("Validation of Derived")
return self
object = Derived()
还需要在 Derived 中调用 init() 来解包不同类型的数据。 此外,validate=True 必须作为参数传递到 init() 中,这部分必须保留以避免 flake8 和 pylint 警告检查:
if validate:
self.validate()
我目前的输出是:
Validation of Derived
Validation of Derived
但我希望预期输出是:
Validation of Parent
Validation of Derived
有没有办法修改父类中validate()方法的调用方式来避免这个错误?
解决方法
由于 Parent
类 __init__()
已经调用了 validate()
,因此您的派生类不需要。但是,您的 validate
版本应该:
class Parent(bytes):
def __init__(self,validate=True):
super().__init__()
if validate:
self.validate()
def validate(self):
print("Validation of Parent")
return self
class Derived(Parent):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
# do specialised setup here.
def validate(self):
super().validate()
print("Validation of Derived")
return self
object = Derived()
按预期输出。
更新:请注意,我已经首先显示了对 super().__init__()
的调用,当然它会调用到您的 validate()
。您实际上可能需要执行 specialised setup
first 和 then 对 init 的超级调用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。