gpt4 book ai didi

python - 接口(interface)隔离原则可以应用于Python对象吗?

转载 作者:行者123 更新时间:2023-12-02 00:47:31 25 4
gpt4 key购买 nike

努力申请SOLID对于一个有机增长并需要重构的 Python 项目的原则,我试图理解 Interface Segregation Principle 如何当接口(interface)不作为语言功能存在时,可以应用于Python语言吗?

最佳答案

接口(interface)是您可以直接在源代码中或在文档中非正式地键入提示的东西。 Python 3 支持function annotations , 3.5+ 实际 type hints ,即使所有这些都不存在,您仍然可以简单地在文档中非正式地键入提示。类型提示只是表示特定参数应具有特定特征。

更具体地说:

interface Foo {
string public function bar();
}

function baz(Foo obj) { .. }

这一切所做的就是声明,无论传递给 baz 的任何参数都应该是一个具有方法 bar 的对象,该方法不接受任何参数并返回一个字符串。即使 Python 没有在语言级别实现任何强制这一点,您仍然可以通过多种方式声明这些内容。

Python 确实支持两件重要的事情:abstract classes和多重继承。

在 Python 中,您可以执行以下操作,而不是使用接口(interface) Foo:

import abc

class Foo(abc.ABC):
@abc.abstractmethod
def bar() -> str:
pass

您不需要实现 Foo,而是:

class MyClass(Foo):
def bar() -> str:
return 'string'

而不是function baz(Foo obj),您可以:

def baz(obj: Foo):
obj.bar()

由于多重继承功能,您可以根据需要精细地隔离接口(interface)/抽象类。

Python 基于鸭子类型原则,因此它不是通过接口(interface)声明和继承来强制执行所有这些,而是​​通常按照“参数必须是可迭代的”等更宽松地定义,并且调用者只需确保参数是可迭代的。抽象类和函数注释,再加上正确的开发工具,可以帮助开发人员在各个执行级别上遵守此类契约。

关于python - 接口(interface)隔离原则可以应用于Python对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33037549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com