如何向类的用户解释它的一个属性的预期类型?

2024-04-28 13:19:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

如何解决这个问题的第一个想法是实现一个接口,然后对用户提供给我的类构造函数的内容进行类型检查,以确保它来自预期的NN类。然而,在Python中,接口(1)和类型检查(2345)似乎都不是好的实践。你知道吗

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


Tags: 对象实例方法用户typing类型内容参数
2条回答

我想说__init__docstring是您想要将它放入的位置,因为NN对象将在这里提供。你知道吗

比如:

"""
(...)
:param NN: an object supporting run(), train() and validate() methods
(...)
"""

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

从python3.5开始,您可以使用type hints。这将向用户记录所需的类型,并启用可选的脱机类型检查。你知道吗

相关问题 更多 >