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__列表内的这些变量名可赋值 ...
随机推荐
- html5 的a标签是可以拨电话的,通过其Href属性来实现
<a href="tel:18700000000">点击给我打电话吧!</a> 注: 1.<a href="tel:18750000000& ...
- 使用php在服务器端生成图文验证码
图文验证码的实现原理: 1):准备些许图片将其存储在数据库,每一张图片对应一个标识字段. 2):在服务器端使用数组的形式将图片与标识字段组合起来. 3):随机给客户端返回图片,并接受用户输入的字段. ...
- 【C语言疯狂讲义】(三)C语言运算符
1.运算符: 连接两个操作数(常量.变量)的符号 用运算符依照一定的规则连接的式子称为表达式 运算符的分类: 1)操作数的个数: 单目运算(++ sizeof !) 双目运算符:... ...
- parcel 入门
https://www.gitbook.com/book/dragon8github/fuck-parcel/details
- hdu 4112 Break the Chocolate(乱搞题)
题意:要把一块n*m*k的巧克力分成1*1*1的单元,有两种操作方式:1,用手掰(假设力量无穷大),每次拿起一块,掰成两块小的:2,用刀切(假设刀无限长),可以把多块摆在一起,同时切开.问两种方式各需 ...
- bootstrap-ui-datetime-picker插件学习
GitHub:https://github.com/Gillardo/bootstrap-ui-datetime-picker 准备 安装:bower install --save bootstrap ...
- Socket编程之Tomcat模拟_采坑汇总
用java.net.Socket来模拟实现Tomcat,碰到了一些坑,大部分是没有想到的,记录下来自查. 直接上代码, public class TomcatDemo { private static ...
- 如何简单的实现一个tab页title的动画效果
首先我们来看看实现的效果 tab上的title沉下去的效果 先来看看布局 <?xml version="1.0" encoding="utf-8"?> ...
- centos7 安装vnc服务
一,安装服务器端 1,添加用户: # useradd vnc # passwd vnc 2,安装gnome桌面 # yum groupinstall "GNOME Desktop" ...
- windows上mysql安装
1. 下载MySQL Community Server 5.7.14 Index of /MySQL/Downloads/MySQL-Cluster-7.1 2. 解压MySQL压缩包 安装路径:E: ...