您可以改为使用策略类,将策略函数注入其中:
import abc
def strategy1(self):
print("strategy1")
class AbstractClient(metaclass=abc.ABCMeta):
@abc.abstractmethod
def execute(self):
pass
class StrategizedClient(AbstractClient):
execute = strategy1
class PlanlessClient(AbstractClient):
pass
这需要python3,但它将强制您的子类注入一种策略:
>>> StrategizedClient()
<strategy.StrategizedClient object at 0x10fd594a8>
>>> PlanlessClient()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class PlanlessClient with abstract methods execute