Python面向对象封装,对象包装程序
本文主要介绍Python打包的对象处理。文章围绕主题,详细介绍了内容,具有一定的参考价值。有需要的朋友可以参考一下。
00-1010概念1、基础1.1、toString方法1.2、打印格式1.3、创建大对象2、高级用法2.1、通过字符串调用函数2.2、上下文管理器
目录
所有python对象都是扩展的PyObject,Python的垃圾收集机制是计算引用。py_ssize就是在这个对象中定义的。对象可以理解为自定义类。在Python中,所有函数都传递泛型指针,所以实际类型可以通过PyObject的ob_type属性来判断,这也是多态性的一种表现。
Python中的垃圾收集机制相当特殊。它采用内存对象池技术,对象释放的空间返回内存池。如果被重用,可以从内存池中获取。如果不再使用,会重新收集,类似于java。的所有内置对象都有自己独特的对象缓冲池机制。这个缓冲池中的对象是不可变的对象,池中的对象是共享的,但是不会造成多重并发的问题。
概念
一、基础
类格式更改:
def __init__(self,x,y):
self.x=x
self.y=y
def __repr__(self):
返回f“使用repr方法: ({self.x},{self.y})”
def __str__(self):
返回f“使用str方法: ({self.x},{self.y})”
fc=FormatChange(5,7)
打印(本币。_ _ repr _ _()#使用repr方法: (5,7)
print(fc) #使用str方法: (5,7)
print(ffc是{fc!r}) #!r表示使用repr方法而不是str方法进行输出。
1.1、toString方法
format_dict={
ymd : {年月日}-{年月日} ,
mdy : {年月日}/{年月日} ,
dmy :“{日}/{月}/{年}”
}
上课日期:
def __init__(自己,年,月,日):
self.year=年
self.month=月
self.day=日
def __format__(self,format_type=ymd):
#format_type:格式类型,默认使用ymd模式
如果不是format_type:
format_type=ymd
fmt=格式_字典[格式_类型]
Return fmt.format(d=self)#这里的格式是一个钩子函数
curr_data=Date(2020,5,6)
#实际调用的格式是类库中的方法,然后反过来调用自定义的重写格式方法。
print(f default format : { format(curr _ data)} )# 2020-5-6
print(f use mdy format : { format(curr _ data, mdy)}) #5/6/2020
1.2、格式化输出
用槽创建的对象的内存占用会减少2/3左右。但缺点是不能给对象添加新的属性,也不能实现继承,所以通常只作为内存优化工具来存储大量数据。
上课日期:
__slots__=[年,月,日]
def __init__(自己,年,月,日):
self.year=年
self.month=月
self.day=日
1.3、创建大对象
二、高级用法
导入数学
类点:
def __init__(self,x,y):
self.x=x
self.y=y
def __repr__(self):
返回fPoint({self.x!r:}、{self.y! r:})
定义距离(自身,x,y):
返回math.hypot(self.x - x,self.y - y)
#第一种方式:这种方式感觉用处不大,前面还是要弄个新的对象。
p=点(2,3)
d=getattr(p,距离)(0,0)
进口经营者
operator . method caller( distance ,0,0)(p)
#当用相同的参数多次调用一个方法时
点数=[
点(1,2),
点(3,0),
点(10,-3),
点(-5,-7),
点(-1,8),
点(3,2)
]
#第二种用法:按离原点的距离排序(0,0)
points . sort(key=operator . method caller( distance ,0,0))
p=点(3,4)
d=operator.methodcaller(“距离”,0,0)
print(fd(p)={d(p)})#5.0
2.1、通过字符串式调用函数
您需要定制进入和退出方法的实现。通常用于网络连接等工具类,代码在with语句中执行。当with出现时,调用enter方法,并将返回值赋给as后面的变量。然后with中的语句开始执行。最后,执行exit来做一些清理工作。异常处理内置于exit方法中。如果忽略异常,可以不返回任何值。如果返回True,异常将被清除。下面是两个实现:一个是工具类,另一个是允许嵌套的工厂类:
简单实现:
从套接字导入套接字,AF_INET,SOCK_STREAM
级惰性连接:
def __init__(自身,地址,家庭=AF_INET,类型=SOCK_STREAM):
self.address=地址
自我家庭=家庭
self.type=type
self.sock=None
def __enter__(self):
如果self.sock不是None:
引发RuntimeError(“已连接”)
self.sock=socket(self.family,self.type)
self.sock.connect(self.address)
返回self.sock
def __exit__(self,exc_ty,exc_val,tb):
self.sock.close()
self.sock=None
从functools导入部分
conn=lazy connection(( www . python . org ,80))
#连接关闭
连接为s:
# conn.__enter__() executes:连接打开
s . send(b get/index . html HTTP/1.0 \ r \ n )
s . send(b host : www . python . org \ r \ n )
s.send(b\r\n )
resp=b 。join(iter(partial(s.recv,8192),b ))
这就是关于Python打包的对象处理的文章。有关Python对象处理的更多信息,请搜索热门IT软件开发工作室之前的文章或继续浏览下面的相关文章。希望你以后能支持风行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。