我有以下代码
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执行超级调用。