面向对象三大特征:
·封装(隐藏)
隐藏对象的属性和实现细节,只对外提供必要的方法。相当于将“细节封装起来”,只对外暴露“相关调用方法”。通过前面学习的“私有属性、私有方法”的方式,实现“封装”。
·继承
继承可以让子类具有父类的特性,提高了代码的重用性。
原有父类设计不变的情况下,可以增加新的功能,或者改进已有的算法。
·多态
多态是指同一个方法调用由于对象不同会产生不同的行为。
继承:
继承是面向对象程序设计的重要特征,也是实现“代码复用”的重要手段。父类或者基类”or子类或者派生类”
Python 支持多重继承,一个子类可以继承多个父类。继承的语法格式如下:
class 子类类名(父类 1[,父类 2,…]):
类体
如果在类定义中没有指定父类,则默认父类是 object 类。也就是说,object 是所有类的父类,里面定义了一些所有类共有的默认实现
类成员的继承和重写:
- 成员继承:子类继承了父类除构造方法之外的所有成员。
- 方法重写:子类可以重新定义父类中的方法
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def say_age(self):
print(self.name,"的年龄是:",self.age)
def say_name(self):
print("我是",self.name)
class Student(Person):
def __init__(self,name,age,score):
self.score = score
Person.__init__(self,name,age) #构造函数中包含调用父类构造函数
def say_score(self):
print(self.name,"的分数是:",self.score)
def say_name(self): #重写父类的方法
print("报告老师,我是",self.name)
s1 = Student("张三",15,85)
s1.say_score()
s1.say_name()
s1.say_age()
通过类的方法 mro()或者类的属性__mro__可以输出这个类的继承层次结构。
object 类是所有类的父类,因此所有的类都有 object 类的属性和方法。
多重继承
Python 支持多重继承,一个子类可以有多个“直接父类”。这样,就具备了“多个父类”的特点(例子):
class A:
def aa(self):
print("aa")
class B:
def bb(self):
print("bb")
class C(B,A):
def cc(self):
print("cc")
c = C()
c.cc()
c.bb()
c.aa()
多态:
多态(polymorphism)是指同一个方法调用由于对象不同可能会产生不同的行为。
多态要注意以下 2 点:
1.多态是方法的多态,属性没有多态。
2.多态的存在有 2 个必要条件:继承、方法重写。
常见的特殊方法统计如下:
每个运算符实际上都对应了相应的方法:
对象的浅拷贝和深拷贝
浅拷贝
对象包含的子对象内容不拷贝。因此,源对象和拷贝对象会引用同一个子对象。
深拷贝
使用 copy 模块的 deepcopy 函数,递归拷贝对象中包含的子对象。源对象和拷贝对象所有的子对象也不同。