类中重载运算,copy,数据的存储(day16总结)

1,算符对应的操作
python中所有的数据类型都是,数据都是对象。
所有的运算符对应的操作,本质都是在调用数据类型对应的魔法方法。(每个运算符都对应一个固定的魔法方法)

class Student(object): def __init__(self, name, age=0, score=0): self.name = name self.age = age self.score = scoredef __repr__(self): return str(self.__dict__)# 重载加法预算符 # self +other = return 返回值 def __add__(self, other): return self.age + other.age# 重载乘法运算符 def __mul__(self, other): return self.score * other# > def __gt__(self, other): return self.score > other.score# < # def __lt__(self, other): #return self.score < other.score# 注意: >和<只需要重载一个stu1 = Student('小明', 18, 60) stu2 = Student('小花', 22, 80)print(stu1 + stu2) print(stu1 * 10) print(stu1 > stu2) print(stu1 < stu2)

2.浅拷贝和深拷贝(面试点!)
拷贝原理: 将被拷贝的对象复制一份,产生一个新的数据,然后将新的数据的地址返回
a.浅拷贝
  1. 列表或字典的copy方法是浅拷贝、切片也是浅拷贝
  2. copy.copy(对象) - 复制指定的对象,产生一个新的对象(不会复制子对象)
b.深拷贝
copy.deepcopy(对象) - 复制指定的对象,产生一个新的对象。如果这个对象中有其他的对象,子对象也会被复制
3.数据的存储
1内存开辟 python的变量都存储在栈区间,对象都在堆区间。
声明变量或者给变量赋值,是先在内存(堆)中开辟存储数据,然后将数据地址保存在变量中。
但是数字和字符串特殊,如果是用数字或者字符串给变量赋值,不会直接开辟空间保存数据,
而是先在内存检测这个数据之前是否已经存储过,如果已经存储直接用上次保存的数据,没有存储才会开辟新的空间保存数据
2. 内存的释放 1)引用计数
python每个对象都有一个属性叫引用计数,用来保存当前对象的引用的个数。
2)python中的垃圾回收机制来判断一个对象是否销毁,就看这个对象的引用计数是否为零,如果为零就会被销毁
【类中重载运算,copy,数据的存储(day16总结)】from sys import getrefcount ##sys模块中的getrefcount方法用来获取引用计数,获取的时候引用默认要加1,因为获取的时候要调用。
4.socket网络编程
1.服务器端
from socket import *""" 进行通信通信的两端就是套接字;有两种类型,分别是服务器套接字、客户端套接字 """ # 1.创建套接字对象(买个电话机) """ family - 设置ip协议类型, AF_INET(ipv4), AF_INET6(ipv6) type - 设置传输协议类型, SOCK_STREAM(TCP), SOCK_DGRAM(UDP)""" server = socket(family=AF_INET, type=SOCK_STREAM)# 2.绑定ip地址和端口(插电话线绑定电话号码) """ bind((ip地址, 端口))ip地址 - 字符串,服务器对应的ip地址 端口号 - int, 端口号用来区分一台电脑上的不同的服务。0-65535, 0-1024是著名端口,一般不选。 同一时间一个端口只能绑定一个服务 """ addr = ('10.7.185.82', 8085) server.bind(addr)# 3.开始监听请求(按电池,等别人打电话) server.listen(512)# 4.让服务器一直运行 while True: print('监听状态....') # 5.接收请求(接电话) # 代码运行到这个位置,会停下来,等到有客户端给服务器发送请求为止。。。 connect, addr = server.accept() print(addr, '连接成功!')while True: # 6.接收数据(听别人说) """ recv(bufsize)- bufsize,设置一次性能够接收的数据大小的最大值,单位是字节 返回的数据类型是字节 """ # print('接收消息前') re_data = https://www.it610.com/article/connect.recv(1024) print(re_data.decode(encoding='utf-8'))# print('接收消息后')# 7.发送数据 (说给别人听) message = input('>>>') connect.send(message.encode())# 8.关闭连接(挂电话) connect.close()

2.客服端
from socket import *# 1.创建套接字对象 client = socket()# 2.连接服务器 client.connect(('10.7.185.82', 8085))while True: # 3.发送消息 message = input('请输入:') client.send(message.encode())# 4.接收消息 re_data = https://www.it610.com/article/client.recv(1024) print(re_data.decode(encoding='utf-8'))

    推荐阅读