Python 为什么要使用不做任何事情的抽象类?
我正在修补一个战略模式的例子,可以在下面找到Python 为什么要使用不做任何事情的抽象类?,python,class,oop,Python,Class,Oop,我正在修补一个战略模式的例子,可以在下面找到 from __future__ import annotations from abc import ABC, abstractmethod from typing import List class Context(): def __init__(self,strategy: Strategy) -> None: self._strategy = strategy @property def st
from __future__ import annotations
from abc import ABC, abstractmethod
from typing import List
class Context():
def __init__(self,strategy: Strategy) -> None:
self._strategy = strategy
@property
def strategy(self) -> Strategy:
return self._strategy
@strategy.setter
def strategy(self, strategy: Strategy) -> None:
self._strategy = strategy
def do_some_business_logic(self) -> None:
print("Context: Sorting data using the strategy (not sure how it'll do it)")
result = self._strategy.do_algorithm(["a", "b", "c", "d", "e"])
print(",".join(result))
class Strategy(ABC):
@abstractmethod
def do_algorithm(self, data:List):
pass
class ConcreteStrategyA(Strategy):
def do_algorithm(self, data: List) -> List:
return sorted(data)
class ConcreteStrategyB(Strategy):
def do_algorithm(self, data: List) -> List:
return reversed(sorted(data))
if __name__ == "__main__":
context = Context(ConcreteStrategyA())
print("Client: Strategy is set to normal sorting.")
context.do_some_business_logic()
print()
print("Client: Strategy is set to reverse sorting.")
context.strategy = ConcreteStrategyB()
context.do_some_business_logic()
为什么使用ABC法和抽象法?我试着把它从代码中去掉,代码仍然有效。它增加了什么
为什么使用ABC和抽象方法
在OOP中,它被称为接口。它定义了继承类需要实现的函数原型。在您的示例中,那些ConcreteStrategyA
和ConcreteStrategyB
是从Strategy
接口继承的具体类
为什么使用空策略类
它不是空的。它定义了派生类继承自的接口。
abstractmethod
是为了强制子类来实现该方法。我找到了您使用的源代码,值得传递链接:好的,我想我现在明白了。因此,接口策略的基本目标是减少bug的可能性。例如,在这种情况下,如果没有Strategy接口,将给开发人员太多的自由,这将导致更高的bug风险。这是正确的吗?这可能是一种解释。对于接口的两个主要用途,您可以查看。