关于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 ...
随机推荐
- 「LOJ 3153」 「JOI Open 2019」三级跳
题面 LOJ 3153 solution 对于任意一对\(A,B\),若区间\([A,B]\)中存在一个数权值大于\(A\)或\(B\),则用这个数来替代\(A\)或\(B\)显然更优. 故只需要考虑 ...
- sql常用函数整理
SQL中包含以下七种类型的函数: 聚合函数:返回汇总值. 转型函数:将一种数据类型转换为另外一种. 日期函数:处理日期和时间. 数学函数:执行算术运算. 字符串函数:对字符串.二进制数据或表达式执行操 ...
- P2943 [USACO09MAR]Cleaning Up G
一句话题意:将一个数列分成若干段,每段的不和谐度为该段内不同数字数量的平方,求不和谐度之和的最小值. 令 \(f_i\) 表示前 \(i\) 个数的最小答案,很容易就能写出暴力转移方程:\(f_i=\ ...
- 【mq读书笔记】消息拉取
疑问:PullRequest何时添加? PullMessageService提供延迟添加与立即添加2种方式 疑问:PullRequest是在什么时候创建的呢? 1.上上图中 PullRequest p ...
- LaTeX中的浮动体
浮动体代码及注释: 显示效果:
- MyBatis-01:环境搭建
MyBatis-01:环境搭建 1.搭建实验数据库 CREATE DATABASE `mybatis`; USE `mybatis`; DROP TABLE IF EXISTS `user`; CRE ...
- PyQt(Python+Qt)学习随笔:QListView的itemAlignment属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListView的itemAlignment属性用于控制每个数据项的对齐方式,其类型为枚举类Qt. ...
- PyQt(Python+Qt)学习随笔:Qt Designer中Action的信号
Action与菜单和工具栏挂接后,只是实现了相关的关联关系,但并不能执行响应操作,真正的响应操作是通过Action的信号与对应槽函数连接实现的. Action提供了4种信号: changed()信号: ...
- pandas 由其中几列生成新的列
data是一个dataframe #data["x1"]=data[["a","b"]].apply(lambda x:x["a& ...
- 使用eslint将项目中的代码修改统一的缩进
背景 继承了组里师兄师姐写的项目的前端代码,但是是两个人写的,有两格缩进的,有四格缩进的,有字符串外用单引号的,有用双引号的. 于是搜索了一下,可以用eslint强制转化. eslint在github ...