文章目录

  • 1. 继承
  • 2. 类成员的继承和重写
  • 3. 多态
  • 4. 对象的浅拷贝和深拷贝
  • 5. 组合



Python是面向对象的语言,面向对象编程的三大特性:继承、封装(隐藏)、多态

1. 继承

  1. 如果类定义汇总没有制定父类,则默认父类是object类。
  2. 定义子类时,必须在其构造函数中调用父类的构造函数。调用格式如下:
    父类名.init(self, 参数列表)

2. 类成员的继承和重写

  1. 成员继承:子类继承了父类除构造方法外的所有成员。
  2. 方法重写:子类可以重新定义父类的方法,这样就会覆盖弗雷德方法,也成为“重写”。

pytorch tensor 复制第0维度_多态


3. 查看累的继承层次结构:

1. 类名.mro()

2. 类名.mro

4. object类是所有类的父类,因此所有的类都有父类的属性和方法。

5. dir()查看对象属性:内置函数,方便我们查看指定对象所有的属性。

6. super()获得父类定义:在子类中,如果想要获得父类的方法时,我们可以通过super()来做。super()代表父类的定义,不是父类对象。

pytorch tensor 复制第0维度_子类_02

pytorch tensor 复制第0维度_多态_03

3. 多态

  1. 多态是指同一个方法调用由于对象不同可能产生不同的行为。
    两个要点:
  1. 多态是方法的多态,属性没有多态。
  2. 多态的存在有2个必要条件:继承、方法重写。

pytorch tensor 复制第0维度_父类_04


pytorch tensor 复制第0维度_父类_05

  1. 特殊方法和预算符重载:
  2. 特殊属性:

pytorch tensor 复制第0维度_多态_06

4. 对象的浅拷贝和深拷贝

【深浅拷贝的博客】

  1. 变量的复制操作:只是形成两个变量,实际还是指向同一个对象。
  2. 浅拷贝:python的拷贝一般都是浅拷贝。拷贝时,对象包含的子对象不拷贝。因此,源对象和拷贝对象会引用同一个子对象。
  • 只是复制了对象本身,也就是,复制了对象的id和引用
  1. 深拷贝:使用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

pytorch tensor 复制第0维度_子类_07

5. 组合

  1. 继承:“is- a”关系,我们可以使用“继承”。从而实现子类拥有的父类方法和属性。“is-a”关系值得是类似这样的关系:dog is animal。狗类就应该继承动物类。
  2. 组合:“has-a”关系,我们可以使用“组合”,也能实现一个类拥有另一个类的方法和属性。“has-a”关系值得是这样的关系:MobilePhone has a CPU。