【发布时间】:2020-03-05 04:35:14
【问题描述】:
我是否违反了 Python 中的模板设计模式?
所以我有一个基类,我在其中创建了模板方法,我想创建两个额外的类,我可以用它们来执行正常的函数返回和生成器函数 yield?
我必须重写 do_something 方法并将语句从“return”更改为关键字“yield”,或者我应该做其他替代设计代码更改吗?
from abc import ABC, abstractmethod
class BaseClass(ABC):
def do_something(self):
x = self.do_step1()
y = self.do_step2()
return x + y
@abstractmethod
def do_step1(self):
pass
@abstractmethod
def do_step2(self):
pass
class ReturnClass(BaseClass):
def do_something(self):
x = self.do_step1()
y = self.do_step2()
return x + y
def do_step1(self):
return 1
def do_step2(self):
return 1
class YieldClass(BaseClass):
def do_something(self):
x = self.do_step1()
y = self.do_step2()
yield x + y
def do_step1(self):
return 2
def do_step2(self):
return 2
class ConcreteReturnClass(ReturnClass):
def do_step1(self):
return 3
def do_step2(self):
return 3
class ConcreteYieldClass(YieldClass):
def do_step1(self):
return 4
def do_step2(self):
return 4
if __name__ == '__main__':
return_class = ConcreteReturnClass();
print(return_class.do_something())
yield_class = ConcreteYieldClass();
print(next(yield_class.do_something()))
我的目标是创建一个基类作为模板,但我想重用同一个类并将实现从只返回一个关键字更改为像生成器函数一样产生。我认为我违反了原则,但我找不到可行的替代方案。
【问题讨论】:
标签: python python-3.x design-patterns