De l'entrée à l'héritage en prison et à la gestion de la mémoire

# 继承
'''
让子类直接拥有父类的属性和方法的过程就是继承
子类 --- 继承者
父类 --- 被继承者(超类)
'''
# 语法
'''
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


# python中子类继承父类可以直接拥有父类所有的属性和方法
print(Student.num)  # 61
sut = Student()
sut.eat('包子')  # 张三在吃包子

print(sut.name, sut.age)  # 张三 18
print(sut.__dict__)  # {'name': '张三', 'age': 18, 'gender': '男'}

# 在子类中添加内容
'''
添加新的类属性和方法
在子类直接定义

添加新的对象属性
需要在子类的__init__方法中通过super()去调用父类的__init__方法

super()只能在对象方法和类方法中使用

'''


class Animal:
    num = 100

    def __init__(self, age=0, gender='雌'):
        self.age = age
        self.gender = gender

    def eat(self, food='草'):
        print(food)

    @staticmethod
    def func1():
        print('静态方法')


class Cat(Animal):
    # 添加类属性
    x = 'abc'
    # 重写类属性
    num = 10

    # 子类添加新的对象属性需要用super().__init__()来调用父类的对象属性

    def __init__(self, name='花花'):
        # super().父类方法 --- 用来保留父类方法
        # 在子类对象方法调用父类对象方法,在子类类方法调用父类类方法,在静态方法不能使用,
        super().__init__()
        self.name = name

    # 添加对象方法
    def play(self):
        print('猫在玩儿毛线')

    # 重写对象方法
    def eat(self, food='鱼'):
        print(f'猫在吃{food}')


cat = Cat()
print(cat.num, cat.x)  # 10 abc
cat.eat()  # 猫在吃鱼


# 练习:定义一个教师类,在Person的基础上添加:职称和工龄两个属性

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


class Tercher(Person):
    def __init__(self, name, gender, rank, work_age=1, age=18):
        super().__init__(name, gender=gender, age=age)
        self.rank = rank
        self.work_age = work_age


t1 = Tercher(name='张三', gender='男', rank='老师', work_age=2)
t2 = Tercher(name='李四', gender='女', rank='老师', work_age=5, age=30)
print(t1.__dict__)  # {'name': '张三', 'age': 18, 'gender': '男', 'rank': '老师', 'work_age': 2}
print(t2.__dict__)  # {'name': '李四', 'age': 30, 'gender': '女', 'rank': '老师', 'work_age': 5}

Gestion de la mémoire

Lorsque vous définissez des variables pour enregistrer des données, le système ouvrira automatiquement de l'espace dans la mémoire pour enregistrer les données (la taille de l'espace est déterminée par la taille des données) par
défaut, si les données utilisées ont déjà été enregistrées, il réappliquera une nouvelle mémoire pour enregistrer ces données, chaîne Et exception de numéro

La question de savoir si une donnée doit être publiée dépend du fait que le nombre de références de données est égal ou non à 0 (s'il existe une référence), elle ne sera pas détruite si elle n'est pas égale à 0

Gestion de la mémoire

Lorsque vous définissez des variables pour enregistrer des données, le système ouvrira automatiquement de l'espace dans la mémoire pour enregistrer les données (la taille de l'espace est déterminée par la taille des données) par
défaut, si les données utilisées ont déjà été enregistrées, il réappliquera une nouvelle mémoire pour enregistrer ces données, chaîne Et exception de numéro

La question de savoir si une donnée doit être publiée dépend du fait que le nombre de références de données est égal ou non à 0 (s'il existe une référence), elle ne sera pas détruite si elle n'est pas égale à 0

copie

copy () La copie superficielle et les données d'origine pointent vers l'adresse de la sous-chaîne ensemble, la sous-chaîne de données d'origine change, la sous-chaîne de données de la copie superficielle changera en conséquence.
deepcopy () La copie complète est complètement copiée, les modifications de données d'origine n'affecteront pas les données de copie profonde

from copy import deepcopy

list1 = [1, 2, 3, [4, 5, 6]]
list2 = list1.copy()
list3 = deepcopy(list1)
print(list1, list2, list3)

list1[3].append('我是新添加的元素')
# list1:[1, 2, 3, [4, 5, 6, '我是新添加的元素']]
# list2:[1, 2, 3, [4, 5, 6, '我是新添加的元素']]
# list3:[1, 2, 3, [4, 5, 6]]
print(f'list1:{list1}\nlist2:{list2}\nlist3:{list3}')

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44628421/article/details/109253891
conseillé
Classement