python用特殊方法定制类(不全)
定义在class中不需要直接调用,python的某些函数或操作符会自动的调用对应的特殊方法.
1、python中 __str__和__repr__
__str__()用于显示给用户,而__repr__()用于显示给开发人员。__str__是可打印的字符输出,内建str()及print语句
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender def __str__(self):
return '(Person: %s, %s)' % (self.name, self.gender) __repr__ = __str__ #直接让repr和str相同 p=Person('chengjiaxing','femail')
print(p) #输出(Person: chengjiaxing, femail)
2、python中 __cmp__
为了对对象进行排序,可以使用函数sorted函数,前提是设置了类的__cmp__方法。
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
def __str__(self):
return '(%s: %s)' % (self.name, self.score)
__repr__ = __str__ def __cmp__(self, s):
if self.name < s.name:
return -1
elif self.name > s.name:
return 1
else:
return 0 >>> L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 77)]
>>> print sorted(L)
[(Alice: 77), (Bob: 88), (Tim: 99)]
3、python中 __len__
调用len()返回实例的长度.
斐波那契数列是由 0, 1, 1, 2, 3, 5, 8...构成。
请编写一个Fib类,Fib(10)表示数列的前10个元素,print Fib(10) 可以打印出数列的前 10 个元素,len(Fib(10))可以正确返回数列的个数10。
class Fib(object):
def __init__(self,num):
a,b,L=0,1,[]
for n in range(num):
L.append(a)
a,b=b,a+b
self.numbers=L def __str__(self):
return str(self.numbers) __repr__=__str__ def __len__(self):
return len(self.numbers) f=Fib(10)
print(f)
print(len(f))
4、python中类型转换
class Rational(object):
def __init__(self, p, q):
self.p = p
self.q = q def __int__(self):
return self.p //self.q def __float__(self):
return float(self.p) /float(self.q) print(float(Rational(7, 2))) #3.5
print(float(Rational(1, 3))) #0.3333333333333333
print(int(Rational(7,2))) #3
5、python中运算符重载
class Time60(object):
def __init__(self,hr,min):
self.hr=hr
self.min=min def __str__(self):
return '%d:%d'%(self.hr,self.min) def __add__(self,other): #重载 + 操作符
if self.min+other.min >60:
minute=max(self.min,other.min)-min(self.min,other.min)
hr=self.hr+other.hr+1
else:
hr=self.hr+other.hr
minute=self.min+other.min
return self.__class__(hr,minute)
#Time60(hr,minute) def __iadd__(self, other): #重载 += 操作符
if self.min+other.min >60:
self.min=max(self.min,other.min)-min(self.min,other.min)
self.hr=self.hr+other.hr+1
else:
self.hr=self.hr+other.hr
self.min=self.min+other.min
return self __repr__=__str__ mon=Time60(6,54)
tue=Time60(3,47)
print(mon,tue) #6:54 3:47
print(mon+tue) #10:7
mon+=tue
print(mon) #10:7
转载:https://www.cnblogs.com/oucsheep/p/6711461.html
python用特殊方法定制类(不全)的更多相关文章
- Python学习_12_方法和类定制
方法 在上一篇随笔中,简单提到了类的某些方法:__init__()等的调用,并简要说明方法和函数的区别. 方法是在类内部定义的函数,方法也是对象,所以方法是类的属性,这就是为什么说实例的方法存在于类定 ...
- python面向对象高级:定制类
Python的class中还有许多这样有特殊用途的函数,可以帮助我们定制类. 比如: __str__ 与__repr____iter____getitem____call__ __str__ 与__r ...
- Python属性、方法和类管理系列之----描述符类
什么是描述符类? 根据鸭子模型理论,只要具有__get__方法的类就是描述符类. 如果一个类中具有__get__和__set__两个方法,那么就是数据描述符,. 如果一个类中只有__get__方法,那 ...
- python特殊方法定制类
#coding:utf-8class RoundFloat(object): def __init__(self,val): assert isinstance(val, float),"v ...
- Python属性、方法和类管理系列之----元类
元类的介绍 请看位于下面网址的一篇文章,写的相当好. http://blog.jobbole.com/21351/ 实例补充 class Meta(type): def __new__(meta, c ...
- Python属性、方法和类管理系列之----属性初探
在学习dict的时候,肯定听过dict是Python中最重要的数据类型,但是不一定知道为什么.马上你就会明白原因了. Python中从模块.到函数.到类.到元类,其实主要管理方法就是靠一个一个的字典. ...
- python中继承、定制类
2.4python中继承 继承中不要忘了调用super().__init__ def __init__(self,args) super(subclass,self).__init___(args) ...
- Python变量、方法、类的命名规则
1. 变量命名总结: - 1.单下划线开头变量:protected - 2.双下划线开头变量:private - 3.双下划线开头,双下划线结尾:系统内置变量 2. 函数命名总结: - 1.私有方法: ...
- Python属性、方法和类管理系列之----__slots__属性
一句话说明 __slots__是用来限制实例的属性的,__slots__可以规定实例是否应该有__dict__属性:__slots__不能限制类的属性. 只有__slots__列表内的这些变量名可赋值 ...
随机推荐
- 25个经典的Spring面试问答
1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...
- group by having和connect by
--使用group by 子句对数据进行分组:对group by 子句形成的组运行聚集函数计算每一组的值:最后用having 子句去掉不符合条件的组.--having 子句中的每一个元素也必须出现在s ...
- Java GUI编程SwingUtilities.invokeLater作用
1 http://blog.micxp.com/index.php/archives/109/ 2
- 快速自检电脑是否被黑客入侵过(Linux版)
前言 严谨地说, Linux只是一个内核, `GNU Linux`才算完整的操作系统, 但在本文里还是用通俗的叫法, 把`Ubuntu`,`Debian`,`RedHat`,`CentOS`,`Arc ...
- 小白学习HTTPS
如果你和我一样是HTTPS的小白的话,那就一起来学习这个吧.争取把这篇博客写好,写全面,从原理到实践再到部署. 让我们先来模拟一个场景:当你嗨皮地敲着代码,你的老板偷偷摸摸跑到你的身边,"小 ...
- 刷脸支付真的来啦!华为nova3带你玩转酷时代~
无论是不愿脱离手套的怕冷手. 或是沾满泥土芬芳的勤劳手. 还是挂着水滴的清洁手…… 每当这些时刻,打开支付宝认证支付, 指纹解锁的能力总是光彩尽失. 不过,就在华为nova 3的发布会上, 一项传说已 ...
- 【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter对SOAP协议性能测试脚本开发
目录: 创建WebService接口模拟服务端 下载SoapUI 新建MathUtil.wsdl文件 创建一个SOAP项目 接口模拟服务端配置以及启动 JMeter对SOAP协议性能测试脚本开发 [阐 ...
- Linux下SVN安装与权限管理
cat /etc/redhat-release //查看系统版本号 CentOS release 7.1 (Final) 这里我们採用yum源安装方式: 1.安装svn yum install sub ...
- 【BZOJ4004】[JLOI2015]装备购买 贪心+高斯消元
[BZOJ4004][JLOI2015]装备购买 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 ( ...
- intellij idea pycharm phpstorm webstorm 这些编辑器像 sublime text 一样使用 ctrl d 来操作光标多选。
在Windows 和 Linux 快捷键是 Alt+J,在 Mac OS X 系统下快捷键是 Ctrl+G . 参考 https://blog.jetbrains.com/phpstorm/2014/ ...