Python常用特殊方法实例总结


Posted in Python onMarch 22, 2019

本文实例讲述了Python常用特殊方法。分享给大家供大家参考,具体如下:

1 __init__和__new__

__init__方法用来初始化类实例;__new__方法用来创建类实例。

主要的区别:

1).__init__通常用于初始化一个新实例,控制初始化的过程,发生在类实例被创建完以后。它是实例级别的方法。

2).__new__通常用于控制生成一个新实例的过程。它是类级别的方法。

__new__具体的作用:

1) 继承一些不可变的class时(比如int, str, tuple),提供一个自定义这些类的实例化过程的途径

2) 实现自定义的metaclass

例子:实现永远返回正数

class PositiveInteger(int): #继承类int
  def __new__(cls, value):
    return super().__new__(cls, abs(value)) #返回父类的__new__方法
i = PositiveInteger(-3) #类实例化
print(i)
3

注意点:

关于__init__方法:第一个参数必须是self;无返回值

关于__new__方法:

1) 继承自object的新式类才有__new__

2) __new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供

3) __new__必须要有返回值,返回实例化出来的实例(也就是__init__self),可以返回父类__new__出来的实例,或者直接是object的__new__出来的实例

2 __del__方法

当对象所有的引用都被删除后触发该方法,代码如下:

class Testdel():
  def __del__(self):
    print("using __del__")
t = Testdel()
t1 = t
del t1
del t
using __del__

3 __str__和__repr__

__repr____str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向程序员

定义__repr__的简单方法:定义了__str__之后,赋值给__repr__,如下:

__repr__ = __str__

4 属性访问

__getattr__(self, name):当用户试图获取一个不存在的属性(name)时的行为

__getattribute__(self, name):当类的属性被访问时的行为

__setattr__(self, name, value):当一个属性被设置时的行为

__delattr__(self, name):当一个属性被删除时的行为

死循环陷阱:

class Rectangle:
  def __init__(self, width=0, height=0):
    self.width = width
    self.height = height
  def __setattr__(self, name, value):
    if name == ‘square':
      self.width = value
      self.height = value
    else:
      self.name = value
  def getArea(self):
    return self.width * self.height
r = Rectangle(3,4)

实例化r = Rectangle(3, 4)就会出现死循环,因为在__init__里面出现了设置属性值,跳到__setattr__里面e的self.name = value这一句,也就是继续赋值操作self.width = width,所以进入死循环。解决方法:

1) else子句改为:super().__setattr__(name, value)

2) else子句改为:self.__dict__[name] = value

5 描述符:将某种特殊类型的类的实例指派给另一个类的属性

特殊类型是指:

__get__(self, instance, owner):访问属性,返回属性的值

__set__(self, instance, value):用于设置属性,不返回任何内容

__delete__(self, instance):删除属性,不返回任何内容

self:描述符类本身的实例,instance:拥有者类的实例,owner:拥有者,类本身

class MyDecriptor:
  def __get__(self, instance, owner): #理解self instance owner的含义
    print(‘getting...', self, instance, owner)
  def __set__(self, instance, value):
    print(‘setting…',self, instance,value)
  def __delete__(self, instance):
    print(‘deleting…',self, instance)
class Test:
  x = MyDecriptor()
test = Test() #实例化
test.x
test.x = ‘X-man'
del test.x

关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
新手如何快速入门Python(菜鸟必看篇)
Jun 10 Python
老生常谈Python基础之字符编码
Jun 14 Python
python编程测试电脑开启最大线程数实例代码
Feb 09 Python
python中验证码连通域分割的方法详解
Jun 04 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
Python列表的切片实例讲解
Aug 20 Python
python 将dicom图片转换成jpg图片的实例
Jan 13 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
Mar 06 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
Apr 22 Python
Python错误的处理方法
Jun 23 Python
Python实现日志实时监测的示例详解
Apr 06 Python
pymongo中聚合查询的使用方法
Mar 22 #Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
Mar 22 #Python
基于OpenCV python3实现证件照换背景的方法
Mar 22 #Python
详解Python给照片换底色(蓝底换红底)
Mar 22 #Python
详解python-图像处理(映射变换)
Mar 22 #Python
python中如何使用分步式进程计算详解
Mar 22 #Python
浅谈Python基础—判断和循环
Mar 22 #Python
You might like
在PHP中利用XML技术构造远程服务(下)
2006/10/09 PHP
php INI配置文件的解析实现分析
2011/01/04 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
PHP代码优化的53个细节
2014/03/03 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
JavaScript对Json的增删改属性详解
2016/06/02 Javascript
jQuery自适应轮播图插件Swiper用法示例
2016/08/24 Javascript
Bootstrap fileinput文件上传组件使用详解
2017/06/06 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
js实现购物车功能
2018/06/12 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
vue实现拖拽效果
2019/12/23 Javascript
Django中使用group_by的方法
2015/05/26 Python
Python中property属性实例解析
2018/02/10 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
一年级学生期末评语
2014/04/21 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
个人批评与自我批评
2014/10/15 职场文书
医院保洁员岗位职责
2015/02/13 职场文书
放假通知怎么写
2015/08/18 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书