给定方法:
def foo(bar):
bar.buzz()
bar.blep()
def bla(bee):
bee.buzz()
现在,我们知道bar
必须有buzz
和blep
方法。但代码的客户端并不知道,除非他们打开实现并通读它(在这个例子中这很容易,但在现实世界中可能很棘手)。
一种解决方案是定义ABC
,如下所示:
def BuzzBlepable(ABC):
@abstractmethod
def buzz():
pass
@abstractmethod
def blep():
pass
现在我们可以获得代码:
def foo(bar: BuzzBlepable):
bar.buzz()
bar.blep()
def bla(bee: BuzzBlepable):
bee.buzz()
问题在于bla
方法并不真正需要bee
参数来实现blep
方法,但我们无论如何都会强制客户端这样做。这引出了一个问题,是否有任何好的做法告诉客户端参数必须符合哪个接口?比如,自动生成的方法文档还是什么?有没有人有任何想法?
答案 0 :(得分:1)
这引出了一个问题,是否有任何好的做法告诉客户 参数必须符合哪个接口?喜欢,自动生成 方法文档或什么?
我认为你想使用docstrings。 Docstrings可用于描述模块,类和方法。因此,您可以在docstring中描述函数所需的参数类型,然后在此类的docstring中描述类的方法。对于文档字符串有几种不同的讨论,你可以找到它们的讨论here。
使用Google风格,您可以执行以下操作:
def foo(param1):
"""
Description of the method
Args:
param1: Description of the param
"""
然后,用户可以使用foo.__doc__
或help(foo)
查看文档。
像PyCharm这样的IDE也能够自动生成这个文档字符串。或者,您可以使用Pyment等工具自动生成文档字符串。