Python有类似C#/Java的接口吗?
我之前当了几个月的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类语言中做同样的事情是完全不同的体验,所以要准备好去做一些你可能不太习惯的事情(比如上面的第三种方法)。祝你好运!