类中重载运算,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.浅拷贝
- 列表或字典的copy方法是浅拷贝、切片也是浅拷贝
- copy.copy(对象) - 复制指定的对象,产生一个新的对象(不会复制子对象)
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'))
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Shell-Bash变量与运算符
- 【React|【React Native填坑之旅】从源码角度看JavaModule注册及重载陷阱
- Lesson11——NumPy|Lesson11——NumPy 位运算
- 二、Dart基础语法|二、Dart基础语法 (二)运算符 类
- 为什么内部类中访问局部变量,局部变量需要final修饰
- JavaScript其他运算符
- C++运算符重载的方法详细解析
- JS中 &&、|| 和 & 、| 的使用
- 空值合并运算符(??)