文章目录
- 1. 继承
- 2. 类成员的继承和重写
- 3. 多态
- 4. 对象的浅拷贝和深拷贝
- 5. 组合
Python是面向对象的语言,面向对象编程的三大特性:继承、封装(隐藏)、多态
1. 继承
- 如果类定义汇总没有制定父类,则默认父类是
object
类。 - 定义子类时,必须在其构造函数中调用父类的构造函数。调用格式如下:
父类名.init(self, 参数列表)
2. 类成员的继承和重写
- 成员继承:子类继承了父类除构造方法外的所有成员。
- 方法重写:子类可以重新定义父类的方法,这样就会覆盖弗雷德方法,也成为“重写”。
3. 查看累的继承层次结构:
1. 类名.mro()
2. 类名.mro
4. object类是所有类的父类,因此所有的类都有父类的属性和方法。
5. dir()查看对象属性:内置函数,方便我们查看指定对象所有的属性。
6. super()获得父类定义:在子类中,如果想要获得父类的方法时,我们可以通过super()来做。super()代表父类的定义,不是父类对象。
3. 多态
- 多态是指同一个方法调用由于对象不同可能产生不同的行为。
两个要点:
- 多态是方法的多态,属性没有多态。
- 多态的存在有2个必要条件:继承、方法重写。
- 特殊方法和预算符重载:
- 特殊属性:
4. 对象的浅拷贝和深拷贝
【深浅拷贝的博客】
- 变量的复制操作:只是形成两个变量,实际还是指向同一个对象。
- 浅拷贝:python的拷贝一般都是浅拷贝。拷贝时,对象包含的子对象不拷贝。因此,源对象和拷贝对象会引用同一个子对象。
- 只是复制了对象本身,也就是,复制了对象的id和引用
- 深拷贝:使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象。源对象和拷贝对象所有的子对象也不同。
- 通过递归,将所有对象信息全部拷贝,包括子对象。
import copy
class MobilePhone:
def __init__(self, cpu, screen):
self.cpu = cpu
self.screen = screen
class CPU:
def calculate(self):
print("计算,算个12345")
print("CPU对象:", self)
class Screen:
def show(self):
print("显示一个好看的画面,亮瞎你的钛合金大眼")
print("屏幕对象:", self)
c = CPU()
s = Screen()
m = MobilePhone(c, s)
m.cpu.calculate()
n = m # 两个变量,但是指向了同一个对象
print(m, n)
m2 = copy.copy(m) # m2是新拷贝的另一个手机对象
print(m, m2)
m.cpu.calculate()
m2.cpu.calculate() # m2和m拥有了一样的cpu对象和screen对象
m3 = copy.deepcopy(m)
m3.cpu.calculate() # m3和m拥有不一样的cpu对象和screen
5. 组合
- 继承:“is- a”关系,我们可以使用“继承”。从而实现子类拥有的父类方法和属性。“is-a”关系值得是类似这样的关系:dog is animal。狗类就应该继承动物类。
- 组合:“has-a”关系,我们可以使用“组合”,也能实现一个类拥有另一个类的方法和属性。“has-a”关系值得是这样的关系:MobilePhone has a CPU。