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通过urllib2爬网页上种子下载示例
Feb 24 Python
python使用Flask框架获取用户IP地址的方法
Mar 21 Python
Python WXPY实现微信监控报警功能的代码
Oct 20 Python
python使用time、datetime返回工作日列表实例代码
May 09 Python
python之pyqt5通过按钮改变Label的背景颜色方法
Jun 13 Python
python 判断字符串中是否含有汉字或非汉字的实例
Jul 15 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
Python 爬取必应壁纸的实例讲解
Feb 24 Python
基于python连接oracle导并出数据文件
Apr 28 Python
python获取百度热榜链接的实例方法
Aug 25 Python
python实现会员管理系统
Mar 18 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 08 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
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
PHP 上传文件大小限制
2009/07/05 PHP
PHP 编写大型网站问题集
2010/05/07 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
扩展String功能方法
2006/09/22 Javascript
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
python实现将元祖转换成数组的方法
2015/05/04 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
python 解压pkl文件的方法
2018/10/25 Python
Pycharm以root权限运行脚本的方法
2019/01/19 Python
用Python实现BP神经网络(附代码)
2019/07/10 Python
python序列化与数据持久化实例详解
2019/12/20 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
Django数据库迁移常见使用方法
2020/11/12 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
历史学专业个人的自我评价
2013/10/13 职场文书
办加油卡单位介绍信
2014/01/09 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
推广普通话主题班会
2015/08/17 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
实现GO语言对数组切片去重
2022/04/20 Golang