python面试题小结附答案实例代码


Posted in Python onApril 11, 2019

1 谈谈你对面向对象的理解?

面向对象的编程---object oriented programming,简称:OOP,是一种编程的思想。OOP把对象当成一个程序的基本单元,一个对象包含了数据和操作数据的函数。面向对象的出现极大的提高了编程的效率,使其编程的重用性增高。

python面向对象的重要术语:

多态(polymorphism):一个函数有多种表现形式,调用一个方法有多种形式,但是表现出的方法是不一样的。

继承(inheritance)子项继承父项的某些功能,在程序中表现某种联系

封装(encapsulation)把需要重用的函数或者功能封装,方便其他程序直接调用

类:对具有相同数据或者方法的一组对象的集合

对象:对象是一个类的具体事例

实例化:是一个对象事例话的实现

标识:每个对象的事例都需要一个可以唯一标识这个事例的标记

python中的类与对象

class Person(object): 
def __init__(self,name): #————————>初始化函数
  self.name = name
  print "------>create:",name
def say_name(self):
  print "my name is %s" %self.name
p1 = Person("gf1") # --------->类的实例化
p2 = Person("gf2")
p1.say_name()
p2.say_name()

以上程序是类的一个基本写法,理解如下:

person就是一个类,在这个类中是很多的方法集合。例如类中包含sayname等,还可以按照程序要求灵活添加各种类的方法。

类中self其实就是类的对象,是一个具体的实例。多种的实例通过类中的self表现出来。

程序中的p1、p2是具体的实例,实体。(学名叫:对象。)。一个对象就是一个实体。实体通过调用属性、方法在类中体现相应的功能。

python中的继承

承就是子类继承了父类相应的功能和方法。

如下代码说明了子类继承父类:

class firsttest:
def __init__(self,name):
self._name = name
def sayfirst(self):
print("hello {0}".format(self._name))
class secondtest(firsttest): #子类继承父类(firsttest)的方法
def __init__(self,name):
firsttest.__init__(self,name)
def saysecond(self):
print("good {0}").format(self._name)
s = secondtest("gf1") #类的具体实例。
s.sayfirst()
s.saysecond()

函数和面向对象编程的区别

相同点:都是把程序进行封装、方便重复利用,提高效率。
不同点:函数重点是用于整体调用,一般用于一段不可更改的程序。仅仅是解决代码重用性的问题。
而面向对象出来代码重用性。还包括继承、多态等。使用上更加灵活。

2 面向对象中super的作用?

Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this,比如:C#),用于传递对象本身,而在调用的时候则不

必显式传递,系统会自动传递。

今天我们介绍的主角是super(), 在类的继承里面super()非常常用, 它解决了子类调用父类方法的一些问题, 父类多次被调用时只执行一次, 优化了执行逻辑,下面我们就来详细看一下。

举一个例子:

class Foo:
def bar(self, message):
print(message)
Foo().bar("Hello, Python.")
Hello, Python

当存在继承关系的时候,有时候需要在子类中调用父类的方法,此时最简单的方法是把对象调用转换成类调用,需要注意的是这时self参数需要显式传递,例如:

class FooParent:
def bar(self, message):
print(message)
class FooChild(FooParent):
def bar(self, message):
FooParent.bar(self, message)
FooChild().bar("Hello, Python.")
Hello, Python.

这样做有一些缺点,比如说如果修改了父类名称,那么在子类中会涉及多处修改,另外,Python是允许多继承的语言,如上所示的方法在多继承时就需要重复写多次,显得累赘。为了解决这些问题,Python引入了super()机制,例子代码如下:

class FooParent:
def bar(self, message):
print(message)
class FooChild(FooParent):
def bar(self, message):
super(FooChild, self).bar(message)
FooChild().bar("Hello, Python.")
Hello, Python

表面上看 super(FooChild, self).bar(message)方法和FooParent.bar(self, message)方法的结果是一致的,实际上这两种方法的内部处理机制大大不同,当涉及多继承情况时,就会表现出明显的差异来,直接给例子: 代码一:

class A:
def __init__(self):
print("Enter A")
print("Leave A")
class B(A):
def __init__(self):
print("Enter B")
A.__init__(self)
print("Leave B")
class C(A):
def __init__(self):
print("Enter C")
A.__init__(self)
print("Leave C")
class D(A):
def __init__(self):
print("Enter D")
A.__init__(self)
print("Leave D")
class E(B, C, D):
def __init__(self):
print("Enter E")
B.__init__(self)
C.__init__(self)
D.__init__(self)
print("Leave E")
E()

结果:

Enter E
Enter B
Enter A
Leave A
Leave B
Enter C
Enter A
Leave A
Leave C
Enter D
Enter A
Leave A
Leave D
Leave E

执行顺序很好理解,唯一需要注意的是公共父类A被执行了多次。

总结

以上所述是小编给大家介绍的python面试题小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
使用Python程序抓取新浪在国内的所有IP的教程
May 04 Python
Python 正则表达式入门(初级篇)
Dec 07 Python
利用python将xml文件解析成html文件的实现方法
Dec 22 Python
Python+Django搭建自己的blog网站
Mar 13 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
Nov 30 Python
python3实现逐字输出的方法
Jan 23 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
Python3爬虫中Splash的知识总结
Jul 10 Python
如何把python项目部署到linux服务器
Aug 26 Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 Python
opencv用VS2013调试时用Image Watch插件查看图片
Jul 26 Python
Python3使用Matplotlib 绘制精美的数学函数图形
Apr 11 #Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
Apr 11 #Python
Python单元和文档测试实例详解
Apr 11 #Python
Python的高阶函数用法实例分析
Apr 11 #Python
Python2与Python3的区别实例分析
Apr 11 #Python
Python3获取电脑IP、主机名、Mac地址的方法示例
Apr 11 #Python
基于django channel实现websocket的聊天室的方法示例
Apr 11 #Python
You might like
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
php笔记之:数据类型与常量的使用分析
2013/05/14 PHP
PHP删除HTMl标签的实现代码
2013/06/30 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
Python信息抽取之乱码解决办法
2017/06/29 Python
python实现简单中文词频统计示例
2017/11/08 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
TensorFlow实现简单卷积神经网络
2018/05/24 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
80年代复古T恤:TruffleShuffle
2018/07/02 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
物业经理自我鉴定
2014/03/03 职场文书
股权转让协议书范本
2014/04/12 职场文书
办理信用卡工作证明
2014/09/30 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫