关于python面试中的设计模式,搞懂这些就足够了
1、什么是设计模式?
设计模式是经过总结、优化,对我们经常遇到的一些编程问题的可重用的解决方案。设计模式不同于类或库可直接作用于代码。相反,它更为的高级,是一种必须在特定的情形下实现的方法模版。
2、面向对象中设计模式的六大原则是什么?
- 开闭原则:一个软件实体如类、模块和函数,对扩展开放,对修改关闭,即一个软件实体应该在不修改原有代码的基础上进行扩展
- 里氏替换原则:引用父类的地方都应该能透明的调用其子类的对象
- 依赖倒置原则:高层模块不应该依赖底层模块,两者都应该依赖其抽象类,抽象不应该依赖细节,细节依赖抽象,即针对接口编程,而非针对细节编程
- 接口隔离原则:使用多个专门的接口,而非一个单一的总接口,即客户端的实现不应该依赖于它无关的接口。
- 迪米特原则:一个软件实体应该尽可能少的和其它软件实体相互作用
- 单一职责原则:一个类只负责一项职责
3、列举几个常⻅的设计模式?
- 创建模式:提供实例化的方法,为适合的状况提供创建对象的方法
- 结构化模式:通常用于处理实体之间的关系,使得不同的实体可以更好的协同工作
- 行为模式:为不同的实体创建通信,为不同的实体之间提供更方便、更灵活的通信方式
4、Mixin 设计模式是什么?它的特点和优点?
为了不违背继承必须是"is-a"的关系同时又能实现多继承的效果,从而出现了Mixin类,这个类是为了做增强功能添加到子类中
特点:
- 责任明确:必须表示是一种功能,而非一个事物
- 功能单一:如果有多个功能,就写多个Mixin类
- 绝对独立:子类不继承该类,也可以正常工作,只是少一个功能而已
优点:
不使用Mixin会有以下的几点弊端,使用Mixin可避免
- 结构复杂:单继承子类的父类是什么,父类的父类是什么都是非常明确的;多继承子类有多个父类,父类又有多个父类,继承关系复杂
- 优先顺序模糊:多继承中多个父类如果有同名方法,在开发中,容易造成思维混乱,子类不知道继承哪个父类,增加开发难度
- 功能冲突:多继承中子类只能继承多个父类中的一个同名方法,从而导致其它父类的方法失效
5、什么是单例模式?单例模式的作用?
单例模式:在整个项目/系统中,一个类只有一个实例的存在
作用:节约内存资源
6、单例模式的应用场景有那些?
python的logger、Windows的资源管理器、线程池、网站计数器等
7、用python实现单例模式
# 创建一个单例模式
class Singleton(object):
_instance = None
def __new__(cls,*args,**kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls,*args,**kwargs)
return cls._instance
class MyClass(Singleton):
pass
#新建两个对象
m1=MyClass()
m2=MyClass()
#验证两个对象是否一致
print(m1 is m2)
print(id(m1), id(m2))
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理
想要获取更多Python学习资料可以加
QQ:2955637827私聊
或加Q群630390733
大家一起来学习讨论吧!
关于python面试中的设计模式,搞懂这些就足够了的更多相关文章
- Python 面试中 8 个必考问题(转载)
Python 面试中 8 个必考问题 1.下面这段代码的输出结果是什么?请解释. def extendList(val, list=[]): list.append(val) return list ...
- 全栈工程师对Python面试中is和==区别的详细解说!看完真的学到了!
面试实习生的时候,当问到 is 和 == 的区别时,很多同学都答不上来,搞不清两者什么时候返回一致,什么时候返回不一致.本文我们来看一下这两者的区别. 我们先来看几个例子: a = "hel ...
- [译]Python面试中8个必考问题
1.下面这段代码的输出结果是什么?请解释. def extendList(val, list=[]): list.append(val) return list list1 = extendList( ...
- Python小世界:彻底搞懂Python一切皆对象!!!
前言 犹记得当初学习Python的时候,对于Python一切皆对象很是懵逼,因为Python是面向对象的动态型语言,而在函数及高阶函数的应用中,如若对于一切皆对象不是有很透彻的了解,基础不是那么牢固的 ...
- Python 面试中可能会被问到的30个问题
第一家公司问的题目 1 简述解释型和编译型编程语言? 解释型语言编写的程序不需要编译,在执行的时候,专门有一个解释器能够将VB语言翻译成机器语言,每个语句都是执行的时候才翻译.这样解释型语言每执行一次 ...
- python面试中被问的最多的10道题
1 性能: 解析下面代码慢在哪里def strtest1(num):str='first'for i in range(num):str+="X"return str解析:pyth ...
- python面试总结2(函数常考题和异常处理)
python函数常考题 可变类型为参数 不能类型为参数 python如何传递参数 传递值还是引用呢?都不是.唯一支持的参数传递是共享穿参 Call by Object(Call by Object R ...
- Python 面试问题
Python 面试问题 最近正在团队内部普及 Python 语言,有些刚接触 Python 语言的工程师在概念上有很多混淆的地方,刚好看到这篇文章:Python面试问题,里面列举的问题都是关于 Pyt ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
随机推荐
- [java基础]复习 java三大特性,异常,接口,String
继承 关键字extends 继承是为了不同的实现(龙生九子,各不相同) 单继承,一个类最多只能有一个父类 除了私有的外,子类可以访问父类的方法.属性. new过程中,父类先进行初始化,可通过super ...
- 1、Go语言介绍
一 Go语言介绍 Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言. Go是静态强类型语言,是区别于解析型语言的编译型语言. 解析型语言--源代码是先翻译为中间代码, ...
- [转载]Windows环境下 Hadoop Error: JAVA_HOME is incorrectly set. 问题
最近尝试在windows开发MR程序并且提交Job,在解压缩好hadoop,配置好环境变量后, 打开cmd 输入hadoop version 的时候出现以下错误: Error: JAVA_HOME i ...
- docker 中的mysql启动端口号总是被占用解决
解决: 1 查 netstat -lnp|grep 3306 2 杀 kill -9 3819 3 再查 netstat -lnp|grep 3306 4 发现还有,杀不尽 5 重启docker 6 ...
- web文件上传漏洞
什么是文件上传漏洞? 指利用系统的对文件上传部分的控制不足或处理缺陷,上传可执行的动态脚本文件/webShell进行攻击行为. 原因 对于上传文件的后缀名(扩展名)没有做较为严格的限制 对于上传文件的 ...
- 自动化运维工具之Puppet常用资源(一)
前文我们聊到了puppet的架构,单机模型和master/agent模型的工作流程以及puppet的基础使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14 ...
- k8s实验操作记录文档
k8s实验操作记录文档,仅供学习参考! 文档以实验操作的过程及内容为主进行记录,涉及少量的介绍性文字(来自网络开源). 仅汇总主题所有链接,详细内容查看需要切换到相关链接.https://github ...
- Fiddler 4 (过滤器的使用)
1.先找到过滤器并且勾选 2.勾选 并填写要过滤的地址 3.运行 最终效果如下
- Mongo管理
MongoDB存储引擎 一. WiredTiger引擎 1. MongoDB3.2版本以上,设置为存储引擎. 2. 基于文档级别的并发控制功能(锁机制) (1). 锁级别:文档级别 (2). ...
- Cypress系列(101)- intercept() 命令详解
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 作用 使用该命令在网络层管理 HTTP ...