4

我的问题更面向 Python,但也可能与 JavaScript 或其他脚本语言有关。

我通常使用静态类型语言(Java、C++、ActionScript,...)进行开发。

我喜欢不时使用 Python,有时我也需要使用 JavaScript。这些是动态类型语言。这没什么错,但我通常很头疼要了解函数或方法中需要哪些参数。即使它是我自己的带有一些文档字符串的代码也会发生!也许是因为眼睛必须在函数定义之外的地方寻找其他地方。

当然,答案应该在文档中。但有时根本不清楚,或者由于使用了鸭子类型,文档本身可能很难编写(“第一个参数是一个函数,它必须有一个 quack() 方法和一个 feathers(arg) 方法,其中 arg是一个字符串" )。我非常想要的是语言本身内部的一种参数描述(即使它是可选的,就像在 ActionScript 中一样)。

明确描述函数/方法的参数的最佳实践是什么?

如果创建一个特殊的装饰器(如果使用 Python),其目的是在我们使用它时检查数据的类型(但因为它将在运行时而不是在编写时使用,那么重点是什么)呢?

你认为这不应该是一个问题吗?比当前的文档字符串做得更多会使开发人员感到困惑,或者我的思想过于面向静态类型?

4

2 回答 2

2

我不了解 Javascript,但 Pythonfunction annotations从第 3 版开始具有可选功能,如下所示:

def haul(item: Haulable, *vargs: PackAnimal) -> Distance:

或者:

def compile(source: "something compilable",
            filename: "where the compilable thing comes from",
            mode: "is this a single statement or a suite?"):

请参阅PEP了解更多信息。

它们可以在运行时访问,甚至可以用于type checking.

于 2012-04-29T13:03:43.290 回答
1

为什么鸭式打字会使文档难以编写?

每当你编写一个函数时,你都会假设参数是特定类型或确认特定接口......所以只需记录一下即可。

例如,如果你有一个swim_in_pond(duck)方法,就不需要记录“duck应该有quack(), swim(), 和方法”——在大多数情况下,说“是一个实例”就dive()足够了。或者,如果记录“ -like”接口对您很重要,我发现声明一个用作文档的基类很有帮助:duckDuckDuck

class DuckBase(object):
    def quack(self):
        """ Makes the duck quack. """

    def swim(self):
        """ Swims around.
            Assumes the duck is already in water.
            Updates the duck's position. """

    def dive(self):
        """ Dives either as deep as possible (either until the duck runs out of
            air, or it hits the bottom of the pond). """
于 2012-04-29T13:06:28.110 回答