在Python中使用继承时,在Parent类中错误地调用了派生类中同名的方法



我有以下代码

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

是否有方法可以修改在Parent类中调用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,然后对init执行超级调用。

相关内容

  • 没有找到相关文章

最新更新