继承内存管理和拷贝
继承
1.什么是继承
继承是让子类直接拥有父类的属性和方法的过程就是继承
子类 - 继承者
父类 - 被继承者(超类)
2.怎么继承
class 子类(父类1, 父类2, 父类3…):
类的说明文档
类的内容
说明:
- 默认情况下, 类继承object:
class 类名: == class.类名(object): - python中的类支持多继承
class Person:
num = 61
def __init__(self, name='张三', age=18, gender='男'):
self.name = name
self.age = age
self.gender = gender
def eat(self, food='馒头'):
print(f'{self.name}吃{food}')
@staticmethod
def func1():
print("静态方法")
class Student(Person):
pass
# 3.继承可以让子类直接拥有父类所有的属性和方法
stu = Student()
print(stu.gender)
stu.eat('肉包子')
print(stu.__dict__)
3.如何在子类添加内容
-
添加类属性和方法
直接在子类中定义 -
添加对象属性
需要在子类的__init__方法中通过super()去调用父类的__init__方法
注意:super()只能在对象方法和类方法中使用
内存管理
定义变量保存数据的时候系统会自动在内存中开辟空间保存数据(空间大小根据数据大小确定)
默认情况下, 使用的数据如果之前已经保存过, 还是会重新申请新的内存保存这个数据, 但是数字和字符串例外
一个数据是否需要释放就看这个数据引用计数是否为0(没有引用),如果不为0(有引用)数据不会销毁,为0(没有引用)数据自动销毁
拷贝
class Dog:
def __init__(self, name='大黄', age=3):
self.name = name
self.age = age
def __repr__(self):
return f'{str(self.__dict__)[1:-1]}'
class Person:
def __init__(self, name='小明', dog=None):
self.name = name
self.dog = dog
def __repr__(self):
return str(self.__dict__)
# 直接赋值: 赋的是地址, 赋值完成后两个变量的地址相同
from copy import copy, deepcopy
p1 = Person(dog=Dog('dahaung'))
print(p1)
p1.name = '小花'
# 浅拷贝
p3 = copy(p1)
print(p3)
p1.name = '小红'
p4 = deepcopy(p1)
print(p4)