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 高级专用类方法的实例详解
Sep 11 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
Mar 15 Python
python读取文件名称生成list的方法
Apr 27 Python
Python高斯消除矩阵
Jan 02 Python
python matplotlib库绘制散点图例题解析
Aug 10 Python
Python线程障碍对象Barrier原理详解
Dec 02 Python
pyecharts动态轨迹图的实现示例
Apr 17 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 Python
python 安装移动复制第三方库操作
Jul 13 Python
python pygame入门教程
Jun 01 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中iconv函数使用方法
2008/05/24 PHP
PHP iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
php简单smarty入门程序实例
2015/06/11 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011/11/14 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
js 毫秒转天时分秒的实例
2017/11/17 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
javascript实现固定侧边栏
2021/02/09 Javascript
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
Python中bisect的用法
2014/09/23 Python
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
python实现手机通讯录搜索功能
2018/02/22 Python
TensorFlow变量管理详解
2018/03/10 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
关于python3中setup.py小概念解析
2019/08/22 Python
基于python实现把图片转换成素描
2019/11/13 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
进程的查看和调度分别使用什么命令
2013/12/14 面试题
民主评议党员自我评议范文2014
2014/09/26 职场文书
保护校园环境倡议书
2015/04/28 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
婚庆主持词大全
2015/06/30 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书