在 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 firstthen 对 init.

进行超级调用