一、类的继承
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版权协议,转载请附上原文出处链接和本声明。