2.5 python面试之面向对象

2.5.1 面向过程和面向对象编程的区别?各自的优缺点和应用场景?

面向过程是以过程为中心,将复杂的问题拆分成多个小问题,再把小问题拆分成更小的问题,小到能够可以解决为止。然后用函数来实现,最后依次调用每个函数即可。优点:复杂的问题简单化,程序设计的复杂度较低,缺点:可扩展性差
面向对象是以对象为中心,将一类具有相同特征的现实实体抽象成模型,用模型来表示实体的相同属性。用类来实现。优点:扩展性强,缺点:程序设计的复杂度高

2.5.2 面向对象设计的三大特征是什么?

封装:功能的具体实现方式对用户不可见
继承:一个类可以派生出多个子类,在父类里定义的方法、属性都自动被子类继承
多态:多个类继承了相同的方法同时又对父类的相同方法做了不同的实现,这就是一个事物多种表现。即一个接口,多个实现

2.5.3 面向对象中有哪些常用概念?

类:类就是一群拥有相同特征的实体的抽象,在类中定义他们共有的属性、方法
对象:对象就是类的实例化,一个类可以实例化多个对象,每个对象可以有不同的属性
类变量:是大家共用的属性,目的是为了节约空间
实例变量:是定义在构造函数中,如果一类中既有实例变量又有类变量,那么实例对象会先访问实例变量
构造函数:实例创建时,对属性进行初始化
析构函数:在实例释放时,做一些收尾的工作

2.5.4 多继承函数有那几种书写方式?

#经典类的写法:
class People:
	def __init__(self,name,age):
		self.name=name
		self.age=age
class Relation:
	def __init__(self):
		pass

	def make_friends(self,obj):
		pass

class Man(People,Relation):
	def __init__(self,name,age,money):
		People.__init__(self,name,age) # 需手动声明要用哪个父类的构造函数
		self.money=money
#新式类的写法:
class People(object):
	def __init__(self,name,age):
		self.name=name
		self.age=age
class Relation(object):
	def __init__(self):
		pass

	def make_friends(self,obj):
		pass

class Man(People,Relation):
	def __init__(self,name,age,money):
		super(Man,self).__init__(name,age) # 按照继承顺序去初始化,不需要手动声明
		self.money=money			

2.5.5 多继承函数执行的顺序(MRO)?

py2中,经典类是按照深度优先,新式类是按照广度优先
py3中,新式类是按照广度优先(py3中没有经典类)

2.5.6 面向对象的接口如何实现?

#抽象类加抽象方法就等于面向对象编程中的接口
from abc import ABCMeta,abstractmethod

class interface(object):
    __metaclass__ = ABCMeta #指定这是一个抽象类
    @abstractmethod  #抽象方法
    def Lee(self):
        pass

    def Marlon(self):
        pass


class RelalizeInterfaceLee(interface):#必须实现interface中的所有函数,否则会编译错误
    def __init__(self):    
        print '这是接口interface的实现'
    def Lee(self):
        print '实现Lee功能'        
    def Marlon(self):
        pass   


class RelalizeInterfaceMarlon(interface): #必须实现interface中的所有函数,否则会编译错误
    def __init__(self):    
        print '这是接口interface的实现'
    def Lee(self):
        pass      
    def Marlon(self):
        print "实现Marlon功能"
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值