Skip to main content
 首页 » 编程设计

python之如果您已经一致地引用实现类,那么 Python 中基类的目的是什么

2025年05月04日23lhb25

我有一堆 python 类负责验证文件,如下所示:

  • java 文件验证器
  • html 文件验证器
  • css 文件验证器
  • javascript 文件验证器

所有这些类都定义了一个 validate_file(path) 和 validate_string(string) 函数。

在我的应用程序的客户端代码中,我将所有这些验证器存储在一个数组中,然后遍历所有这些验证器并以完全相同的方式调用它们的方法。

在我的例子中是否有定义一个将这些方法定义为抽象的基“验证器”类的目的?我如何从使这些单独的类遵循基类中获益?或者换句话说,如果我有一个由所有这些验证器实现的基类,哪些功能会被解锁?

请您参考如下方法:

如果您曾经编写过需要处理混合类型的代码,其中一些可能会定义 API 方法,但不应该将其视为“验证器”,具有“true”的公共(public)基类"验证器可能有助于提前检查类型并只处理“真正的”验证器,而不仅仅是“看起来像验证器的东西”。也就是说,方法名称越复杂,您就越不可能遇到这种混淆。不同类型巧合地实现一个非常小众的方法名称的可能性很小。

也就是说,这是一个非常小众的用例。通常,如您所见,Python 的鸭子类型行为本身就足够好;如果不同类型之间没有共同的功能,那么拥有抽象基类的唯一有意义的优势是对开发人员而言,而不是程序本身:

  1. 为 API 使用者提供一个共同的引用点可以明确他们也可以访问哪些方法
  2. 对于带有@abstractmethod修饰方法的实际ABC,它提供了子类的定义时检查,使维护者不可能不小心省略一个方法