gue*_*tli 7 python inheritance design-patterns dependency-injection inversion-of-control
特别是在单元测试中,我们使用这种"设计模式",我称之为"从班级获取课程"
framworktest.py:
class FrameWorkHttpClient(object):
....
class FrameWorkTestCase(unittest.TestCase):
# Subclass can control the class which gets used in get_response()
HttpClient=FrameWorkHttpClient
def get_response(self, url):
client=self.HttpClient()
return client.get(url)
Run Code Online (Sandbox Code Playgroud)
mytest.py:
class MyHttpClient(FrameWorkHttpClient):
....
class MyTestCase(FrameWorkTestCase):
HttpClient=MyHttpClient
def test_something(self):
response=self.get_response()
...
Run Code Online (Sandbox Code Playgroud)
该方法不是通过导入来get_response()获取类self.这样子类可以修改类并使用不同的类HttpClient.
这个名称是什么(从班级获得类)"设计模式"?
这是"控制反转"还是"依赖注入"?
我相信这与使用 Python 特定语法实现的简单多态性具有相同的目的。您不是让虚拟方法返回新实例,而是将实例类型存储为类/子类中的“可重写变量”。
这可以重写为虚拟方法(抱歉我不太熟悉 Python,所以这只是伪代码)
virtual HttpClient GetClient()
return new FrameworkHttpClient()
Run Code Online (Sandbox Code Playgroud)
然后在子类中,更改方法的实现以返回不同的类型:
override HttpClient GetClient()
return new MyHttpClient()
Run Code Online (Sandbox Code Playgroud)
如果你想称其为模式,我会说它类似于策略 GoF 模式。在您的特定情况下,被抽象的算法是创建特定的 HttpClient 实现。
经过再三思考 - 正如你所说,这确实可以被视为一个 IoC 示例。
| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |