python实战方法(Python常用特殊方法实例总结)
python实战方法
Python常用特殊方法实例总结本文实例讲述了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程序设计有所帮助。
原文链接:https://blog.csdn.net/heshiliqiu/article/details/82529554
- python自动化邮件管理(Python实现E-Mail收集插件实例教程)
- python3标准库资源(Python3标准库总结)
- python解析excel例子(Python玩转Excel的读写改实例)
- python编写端口扫描器(Python开发网站目录扫描器的实现)
- python读取word的表格(Python使用reportlab模块生成PDF格式的文档)
- pythondjango图解(详解Django-restframework 之频率源码分析)
- python后端生成的pdf文件(Python实现截取PDF文件中的几页代码实例)
- python list基本操作(Python3中列表list合并的四种方法)
- python 获取数组任意组合(Python实现求两个数组交集的方法示例)
- pythonpulp怎么使用(pyhanlp安装介绍和简单应用)
- 闭包python讲解(详解Python循环作用域与闭包)
- pythonmatplotlib怎么用(Python matplotlib画图与中文设置操作实例分析)
- centos8配置python开发环境(CentOS6.9 Python环境配置python2.7、pip、virtualenv)
- python默认缩进设置(不归路系列:Python入门之旅-一定要注意缩进!!!推荐)
- python3中super函数的基本用法(实例讲解Python3中abs函数)
- python微信红包分配(PHP切割整数工具类似微信红包金额分配的思路详解)
- 于正又推女性古装大剧 杨蓉乔欣演女配,两位女主成 重头戏(于正又推女性古装大剧)
- 乔欣古装女主戏获热度 作为女主,却没吃到红利(乔欣古装女主戏获热度)
- 爱情是什么(爱情是什么最经典的话)
- 乔欣 古装剧中的高颜值(古装剧中的高颜值)
- 怎么才可以财富自由(如何让自己实现财富自由)
- 为什么越来越多年轻人回农村(为什么越来越多年轻人回农村生活)
热门推荐
- dockerfile自定义镜像图解(Docker images导出和导入操作)
- mysql8修改默认端口(MySQL 8.0新特性 — 管理端口的使用简介)
- python读取数据集的图片(浅析Python 读取图像文件的性能对比)
- vuekeep-alive源码(vue中keepAlive组件的作用和使用方法详解)
- 简述css3动画与过渡效果(CSS3制作翻转效果_动力节点Java学院整理)
- mysql统计函数详解(浅析MySQL的基数统计)
- python爬虫第一本书(我用Python抓取了7000 多本电子书案例详解)
- php创建文件(php创建多级目录与级联删除文件的方法示例)
- php怎么实现多线程(PHP实现的多进程控制demo示例)
- python处理水印(Yii 使用intervention/image拓展实现图像处理功能)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9