首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果您已经一致地引用实现类,那么Python中基类的用途是什么

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

Stack Overflow用户
提问于 2018-05-31 18:48:13
回答 2查看 37关注 0票数 1

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

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

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

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

在我的例子中,定义一个基本的“验证器”类,它将这些方法定义为抽象的,这有什么目的吗?我如何才能从让这些单独的类坚持基类中受益呢?或者换句话说,如果我有一个基类,所有这些验证器都实现了它,那么哪些功能将被解锁?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 18:58:37

如果您曾经编写过需要处理混合类型的代码,其中一些可能定义了API方法,但不应该被视为“验证器”,那么为“真正的”验证器创建一个公共基类可能有助于提前检查类型,并且只处理“真正的”验证器,而不仅仅是“看起来像验证器的东西”。也就是说,方法名越复杂,最终出现这种混乱的可能性就越小;不同的类型巧合地实现一个真正的利基方法名的可能性非常小。

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

  1. 为API使用者提供了一个通用的参考点,它清楚地说明了他们可以期望哪些方法可以访问带有@abstractmethod修饰方法的实际ABCs的
  2. ,它为子类提供了定义时检查,使得维护人员不可能意外地省略某个方法

票数 3
EN

Stack Overflow用户

发布于 2018-05-31 18:59:32

Python中的基类用于共享实现细节和文档相似性。我们不需要为功能相似的东西使用公共基类,就像我们使用协议和鸭子类型一样。对于这些验证函数,我们可能根本不需要使用类;Java的设计目的是迫使人们将所有内容都放在类中,但是如果您的类中只有一个静态方法,那么这个类就是杂乱的。拥有一个通用的超类将使您能够使用isinstance动态检查它们,但是我真的想知道为什么您要在一个您不知道它们是什么的上下文中处理它们。对于程序员来说,函数名中的常用词可能就足够了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50622529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档