python - Python中的“鸭子打字”也是一种“外观设计模式”吗?
问题描述
每当我们能够从不同的类中调用一个函数时,它会被视为外观设计模式吗?
class Mobile:
def __init__(self, name, ram, memory):
self.name = name
self.ram = ram
self.memory = memory
def info(self):
return self.name, self.ram, self.memory
class Printer:
def __init__(self, name, size, color):
self.name = name
self.size= size
self.color= color
def info(self):
return self.name, self.size, self.color
mob = Mobile("Dark", 8, 128)
prt = Printer("Alpine", '4-5', 'white')
print(mob.info())
print(prt.info())
在上面的代码中,我们对两个类使用了相同的函数。这会被视为外观设计模式吗?
解决方案
外观通过单个接口提供抽象
你在这里没有抽象任何东西,只是定义了两个独立的实例方法,可以用任何 OOP 语言完成,所以鸭子类型是无关紧要的
请注意,您的类是完全相同的,因此您不需要两个类,只需要两个实例class Mobile
class Mobile:
def __init__(self, name, ram, memory):
self.name = name
self.ram = ram
self.memory = memory
def info(self):
return self.name, self.ram, self.memory
mob1 = Mobile("Dark", 8, 128)
mob2 = Mobile("Alpine", 16, 128)
如果您定义了一个抽象基类,那么您将使用继承与子类,但仍然不是外观
在您的情况下,外观的一个示例是某些运营商将呼叫/消息(通过单个接口)路由到任何“移动设备”,其中移动设备可能具有完全不同的联系方式(contact()
可以定义为抽象功能)一个父类)
推荐阅读
- python - 在文件中搜索特定信息
- html - 如何使按钮元素内的css动画更小?
- linux - 如何将多个数据附加到文件中?
- reactjs - 将 React 组件映射到 'contentEditable' 元素。通过退格删除组件时如何解决 Node.removeChild 错误?
- deno - 如何修复 Deno 中的“必须在封闭类中声明”错误?
- reactjs - 类型错误:报价未定义。无法弄清楚为什么这个状态是未定义的
- django - Django app conflicts with an existing Python module
- cpu - 为什么我们在主控单元中需要两个 ALUop?
- amazon-web-services - 如何跨区域共享依赖关系?
- docker - docker容器之间的TCP连接