在 Python 中使用继承时,在父 class 中错误地调用了 Derived class 中同名的方法
Method with same name in Derived class wrongly called in Parent class while using inheritance in 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
有没有办法修改 Parent class 中调用 validate() 方法的方式来避免这个错误?
因为 Parent
class __init__()
已经调用了 validate()
你派生的 class 不需要。但是,您的 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.
进行超级调用
我有以下代码
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 class 中调用 validate() 方法的方式来避免这个错误?
因为 Parent
class __init__()
已经调用了 validate()
你派生的 class 不需要。但是,您的 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.