Python有类似C#/Java的接口吗?

8 投票
5 回答
5073 浏览
提问于 2025-04-17 03:12

我之前当了几个月的C#程序员,习惯了使用一些可以传递给库的接口,不用担心对象是怎么创建的。

现在我准备开始一个比较大的项目,可能会用Python(我之前写过很多Python代码,但主要是自己用来做数据分析之类的),我想知道这个语言里有没有类似的概念?我试着在网上查了一下,但没找到什么有用的信息。

如果没有类似的概念也没关系,那大家通常是怎么做的呢?

5 个回答

5

Python是一种动态类型的语言,这意味着在大多数情况下,你不需要使用泛型或模板。

17

如果答案是否定的,那也没关系,但在这种情况下,人们通常会怎么做呢?

鸭子类型

重要的是,要以一种新的视角来学习Python,放下C#带来的那些技术包袱。

把Python当作一门全新的语言来学习。不要试图把Python和C#之间的概念进行对比。那样只会让人感到困惑。


“接口,而不是泛型或模板”

这没什么关系。所有那些静态类型声明的技术其实并不是必需的。为了打破规则而进行类型转换也没有必要。

5

我对接口的理解来自Java,所以希望这能接近你所说的内容……

在Python中,没有一种语法可以明确地说明一个特定的对象拥有一组方法和属性,因为Python使用的是动态类型鸭子类型。如果你想检查一个对象是否有某个方法或属性,你可以:

  • 通过反射来深入了解它(这需要做的工作比较多)
  • 在它的 __dict__ 中查找你想要的内容(这是一个包含对象所有成员的字典)。我觉得 MyObj.__dict__.hasKey(o) 是你想要的。(这比较简单)
  • 直接使用这个对象,并相信你自己、其他开发者或者用户给你提供了一个合适的对象。(这是最简单的,但有风险)
  • 或者,做上面的事情,并把它放在一个 try/except 块中。(这对Java程序员来说会比较熟悉)

在Python中设计一套复杂的类,与在C类语言中做同样的事情是完全不同的体验,所以要准备好去做一些你可能不太习惯的事情(比如上面的第三种方法)。祝你好运!

撰写回答