关于python:如何向我的类的用户解释其属性的预期类型?

How do I explain to the user of my class the expected type of one of its attributes?

我在Python中开发了一个类,其中一个属性应该表示一个神经网络。我希望这个属性实际上是另一个类的实例,我们称它为NN,有几种方法(如train()用于培训,predict()用于预测等)。此外,我认为初始化这个属性的一个合理方法是使用我的类的构造函数,这将期望一个NN类的实例作为它的参数之一。

关于如何解决这个问题,我的第一个想法是实现一个接口,然后输入check,检查用户提供给我的类构造函数的内容,以确保它来自预期的NN类。然而,似乎在Python中,接口(1)和类型检查(2、3、4、5)都不是好的实践。

相反,我们应该使用duck类型,并尝试使用objects方法,直到不能(即将类型检查延迟到运行时)。但是,在我的例子中,NN类可能非常复杂,有几个方法和属性。如果我真的放弃了接口的想法,仅仅期望我的类的用户为一个对象提供所有必要的方法和属性,他/她怎么知道这个对象的期望值呢?我应该在类docstring、构造函数docstring或其他地方编写所有这些信息吗?还是有更好的方法来解决这种情况?


我想说,__init__docstring是您想要放入它的地方,因为它是提供nn对象的地方。

类似:

1
2
3
4
5
"""
(...)
:param NN: an object supporting run(), train() and validate() methods
(...)
"""

这里的优点是你可以提供任何东西作为参数-见鬼,你可以写一个甚至不是类的nn参数,而是一个函数,或者一个内置的修改实例,或者其他类似的疯狂的东西-只要用户提供了一些正确运行的东西,它就会像你的神经网络一样工作。


从Python3.5开始,您可以使用类型提示。这将向用户记录预期的类型,并启用可选的脱机类型检查。