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功能"