DAY16总结

day16

  • 一个子类继承多个父类时,只能继承一个父类的对象属性,能继承所有方法和类字段

  • 在一个类继承多个类时,类名后括号中继承的顺序就是mro顺序列表中的顺序

  • 运算符重载:所有的运算符对应的操作,本事都是在调用数据类型对应的魔法方法。每个运算符都对应一个魔法方法

class Stu(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score

    def __add__(self, other):  # self是加号前的数据,other是加号后的数据
        return self.age + other.age

    def __mul__(self, other):
        pass

    def __truediv__(self, other):
        pass

    def __lt__(self, other):  # 大小比较运算符只需要重载一个
        return self.age < other.age

    # def __gt__(self, other):
    #     return self.score > other.score

stu1 = Stu('aaa', 18, 60)
stu2 = Stu('bbb', 19, 80)
print(stu1+stu2)
  • 深浅拷贝
    • 一个变量直接给另一个变量赋值:直接将地址赋值,赋完后两个变量指向同一块内存区域
    • 浅拷贝:列表或字典的copy方法是浅拷贝、切片也是浅拷贝。copy.copy(),赋值指定的对象,产生一个新的对象。不会复制子对象
    • 拷贝的基本原理:将被拷贝的对象复制一份产生一个新的数据,将其地址返回
import copy

class Stu:
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def __copy__(self):
        return Stu(self.name, self.score)


    def __mul__(self, other: int):
        return list((self.__copy__() for _ in range(other)))

stu = Stu('aaa', 60)
res = stu * 3
print(res)
stu2 = copy.copy(stu)
  • 深拷贝:copy.deepcopy(对象),复制指定对象,产生新对象,如果这个对象中有其他的对象,子对象也会被复制

  • 内存管理:栈区间与堆区间

    • 数据的存储(内存开辟):python所有变量都存储在栈区间,对象都在堆区间;声明变量或者给变量赋值,是先在内存(堆)中开辟存储数据,然后将数据地址保存在变量中,数字和字符串有特殊情况,多个不同名的变量存储相同值的数字或字符串,所有变量指向的内存地址相同(不会直接开辟空间保存数据,而是先在内存中检测这个数据之前是否已经存储过,如果已经存储直接使用上次保存的数据,没有存储才会开辟新的空间保存数据)
    • 内存释放:
      • 引用计数:python中每个对象都有一个属性叫引用计数,用来保存当前对象的引用的个数;python中的垃圾回收机制判断一个对象是否销毁,就看这个对象的引用计数是否为0,如果为0就销毁(引用计数类似于linux的文件链接数)
  • 套接字(socket):进行通信的两端就是套接字,分为服务端套接字和客户端套接字

  • 创建套接字服务端

    • 1.创建套接字对象
    • 2.绑定ip地址和端口
    • 3.开始监听请求
    • 4.服务端开始运行
    • 5.接受请求
    • 6.接受消息
    • 7.发送数据
    • 8.关闭连接

你可能感兴趣的:(DAY16总结)