Python面向对象封装,对象包装程序

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: