python – 在动态语言中键入类

我不得不承认我只掌握Python的基本知识,目前正在学习Haskell.

我想知道类型类的概念是否存在/在Python或Clojure(或其他动态强类型语言)中是否有意义?

换句话说,如果我有一个函数名f,那么根据提供给f的运行时参数,将调用一个不同的函数实现(比如属于Haskell中属于Eq类型类的类型的==函数).这样的概念是否存在于Clojure / Python等动态语言中?

最佳答案
你可以使用clojure中的多方法或协议,或者使用python中的简单成员函数(类方法)来接近这一点.但是,在haskell中存在的每一个中都缺少一个重要特征:返回型多态.

编译器知道您“期望”返回函数的类型,并可以相应地调度到不同的实现.这意味着,在相同参数上调用的相同函数可以执行完全不同的操作,具体取决于对其返回值执行的操作.例如:

Prelude> read "[5,6,7]" :: [Int]
[5,6,7]
Prelude> read "[5,6,7]" :: [Double]
[5.0,6.0,7.0]

同样,您甚至可以拥有多态常量,每个类型类实例具有不同的值:

Prelude Data.Word> (minBound, minBound, minBound) :: (Int, Bool, Word8)
(-9223372036854775808,False,0)

你不能用动态语言真正做到这一点,因为没有类型推断.您可以通过传递代表“我想要的结果类型”的对象来伪装它,并使用它们作为您的调度程序,但它并不是真的相同.

转载注明原文:python – 在动态语言中键入类 - 代码日志