【发布时间】:2018-05-26 04:19:30
【问题描述】:
我来自 Java 并学习 Python。到目前为止,我发现非常酷但很难适应的是不需要声明类型。我知道每个变量都是一个指向对象的指针,但到目前为止我还无法理解如何设计我的代码。
例如,我正在编写一个接受 2D NumPy 数组的函数。然后在函数体中,我调用了这个数组的不同方法(这是 Numpy 中array 的对象)。但是将来假设我想使用这个函数,到那时我可能已经完全忘记了我应该将什么作为类型传递给函数。人们通常会做什么?他们只是为此编写文档吗?因为如果是这样的话,那么这涉及更多的类型,并且会提出关于不声明类型的想法的问题。
另外假设我想在将来传递一个类似于数组的对象。通常在 Java 中,一个人会实现一个接口,然后让两个类来实现这些方法。然后在函数参数中,我将变量定义为接口的类型。如何在 Python 中解决这个问题,或者可以使用哪些方法来实现相同的想法?
【问题讨论】:
-
鸭式打字的目的不是一开始就少写代码
-
如果你的代码由于某种原因确实依赖于传入的特定类型,你可以使用
assert isinstance(foo, Foo)作为函数/方法的第一行(这也可以作为阅读文档时的文档代码),但这通常只是限制了以后可以用该函数做什么。 -
@ErikAllik:不要断言,引发 TypeError
-
@NeilG:嗯,是的,是的;取决于你;有时您希望
assertions 确保您正确理解了自己的代码,但当然这比参数类型更通用。
标签: python