day18

一、类的继承

1.继承

1)什么是继承

  • 子类直接拥有父类属性和方法的过程就是继承
  • 子类:继承者
  • 父类:被继承者,父类又叫超类

2)怎么继承

  • class 子类(父类):

    ​ pass

  • 注意:如果定义类的时候没有添加父类,默认继承python的基类object

    ​ 同一个子类可以同时继承多个父类:class 子类(父类1,父类2,…)

  • python中子类可以继承父类所有的属性和方法

class Person:
    def __init__(self):
        self.name = '小红'
        self.age = 18
        self.gender = '男'

    def study(self, book):
        print(f'{self.name}在看书:{book}')

    @classmethod
    def person_power(cls):
        print('呼吸')



class Student(Person):
    pass


stu1 = Student()
print(stu1.name)  # 小红
stu1.study('《小狗钱钱》')  # 小红在看书:《小狗钱钱》
Student.person_power()  # 呼吸

2.重写

1)在子类中添加属性和方法

  • 添加类属性:直接在子类中定义新的属性

  • 添加方法:直接在子类中定义新的方法

  • 在子类中添加方法的时候可以对父类中的方法进行重写

  • 在子类中可以通过‘super().方法’的形式调用父类中的方法。(注意:不能在静态方法中使用super调用父类的方法)

  • 总结:super的用法:

    ​ 可以通过super在子类中调用父类中的方法

    ​ super().方法() - 直接调用当前类的父类的指定方法

    ​ super(类,对象).方法() - 调用指定类的父类的指定方法(要求对象必须是前面的类的对象)

class A:
    x = 100
    def func1(self):
        print('A1')
class B(A):
    y = 20
    def func1(self):
        super().func1()  # self.__class__.__base__().func1()
        print('B2')
print(A.x)
print(B.x)  # 100
# print(A.y)  # 报错
b = B()
b.func1()  # A1  B2
  • 添加对象属性:在 __ init __ 方法中通过super()去调用父类中的 __ init __
class Ani:
    def __init__(self):
        self.age = 8
class Cat(Ani):
    def __init__(self):
        super().__init__()
        self.name = '小花'
cat1 = Cat()
print(cat1.age)

3.对象属性的添加问题

class Person:
    def __init__(self, name, age, sex='男'):
        self.name = name
        self.age = age
        self.sex = sex


class Student(Person):
    def __init__(self, tel, name, age=18, sex='男'):
        self.tel = tel
        self.num = 0
        self.grand = '000'
        super().__init__(name, age, sex)


p = Student('156', '小花', age=20, sex='女')
print(p.age, p.sex)

4.多继承

  • 多继承的时候子类可以继承所有父类的类属性和方法,但是只能继承第一个父类的对象属性

二、私有化(补充)

1.访问权限(编程常识):

  • 公开的:在类的内部可以使用,类的外部也可以使用还可以被继承(python中所有的属性和方法都是公开)
  • 保护的:在类的内部可以用,可以被继承
  • 私有的:在类的内部可以用

2. python的私有化

  • 方法:在属性名或者方法名前加__就可以让属性或方法变成私有的
  • 原理:假的私有化;在 __ 开头前加 __ 类名

三、拷贝

  • 浅拷贝和深拷贝的区别:

    不管是浅拷贝还是深拷贝都会复制被拷贝的对象产生一个新的对象,然后用新的对象来赋值

    如果被拷贝的对象中有子对象,浅拷贝不会复制子对象,深拷贝会复制子对象产生新的对象

四、内存管理

  • 内存管理分为内存的开辟和释放:

1.内存的开辟 - 使用数据时候就申请内存保存数据

  • python中所有的类型都是类,所有的数据都是对象,对象都保存在堆里面
  • 在保存数据的时候,相同的不可变数据内存中只保存一份,相同的可变数据在内存中一定会保存多份

2.内存的释放 - 垃圾回收机制

  • python中内存中的某个数据对应的内存是否释放,看这个数据在程序中的引用个数,当引用个数大于0的时候数据不会被销毁,当数据的引用个数为0的时候数据会被自动销毁

版权声明:本文为py_xiaobai_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。