Sim*_*one 7 python solid-principles interface-segregation-principle
为了将SOLID原则应用于有机增长且需要重新分解的Python项目,我试图理解接口隔离原理如何应用于Python语言,当接口不存在时语言功能?
dec*_*eze 11
接口是您可以在源代码中或在文档中非正式地键入提示的内容.Python 3支持函数注释,3.5 +实际类型提示,即使不存在所有类型提示,您仍然可以在文档中非正式地键入提示.类型提示只是说特定参数应具有特定的特征.
更具体地说:
interface Foo {
string public function bar();
}
function baz(Foo obj) { .. }
Run Code Online (Sandbox Code Playgroud)
所有这一切都声明传入的参数baz应该是一个带有方法的对象,该方法bar不带参数并返回一个字符串.即使Python没有在语言级别实现任何东西来强制执行此操作,您仍然可以通过多种方式声明这些内容.
Python确实支持两个重要的事情:抽象类和多重继承.
而不是interface Foo在Python中你这样做:
import abc
class Foo(abc.ABC):
@abc.abstractmethod
def bar() -> str:
pass
Run Code Online (Sandbox Code Playgroud)
而不是implements Foo,你做:
class MyClass(Foo):
def bar() -> str:
return 'string'
Run Code Online (Sandbox Code Playgroud)
而不是function baz(Foo obj),你做:
def baz(obj: Foo):
obj.bar()
Run Code Online (Sandbox Code Playgroud)
由于具有多重继承功能,您可以根据需要精细地隔离接口/抽象类.
Python基于duck-typing原则,因此不是通过接口声明和继承强制执行所有这些,而是通常在"参数必须是可迭代的"等方面更松散地定义,并且调用者只需要确保参数是可迭代的.抽象类和函数注释与正确的开发工具相结合,可以帮助开发人员在各种执行级别上遵守此类合同.
| 归档时间: |
|
| 查看次数: |
1381 次 |
| 最近记录: |