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__列表内的这些变量名可赋值 ...
随机推荐
- ZooKeeper安装与执行
首先从官网下载ZooKeeper压缩包,然后解压下载得到的ZooKeeper压缩包,发现有"bin,conf,lib"等文件夹. "bin文件夹"中存放有执行脚 ...
- 【SpringMVC学习05】SpringMVC中的参数绑定总结——较乱后期准备加入 同一篇幅他人的参数绑定
众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springm ...
- 利用python 掌握机器学习的过程
转载:http://python.jobbole.com/84326/ 偶然看到的这篇文章,觉得对我挺有引导作用的.特此跟大家分享一下. 为了理解和应用机器学习技术,你需要学习 Python 或者 R ...
- JSTL JSP页面推断某个cookie的值和读取值....
<c:if test="${cookie['woshop'].value eq '1'}"> <div> ...
- lua math 库
lua math库 (2012-05-18 17:26:28) 转载▼ 标签: 游戏 分类: Lua atan2.sinh.cosh.tanh这4个应该用不到. 函数名 描述 示例 结果 pi 圆周率 ...
- swift - 全屏pop手势
UINavigationController系统自带有侧滑手势,但是这个手势第一点只能边缘侧滑才可以有效,第二点当手动隐藏系统的导航时,这个手势就不能生效了 为了能到达到全屏pop的效果这里有2中解决 ...
- [译]GLUT教程 - 修改菜单
Lighthouse3d.com >> GLUT Tutorial >> Pop-up Menus >> Modifying Menus 肯定会有菜单需要被修改的状 ...
- Effective C++ 49,50
49.熟悉标准库. C++标准库非常大. 首先标准库中函数非常多,为了避免名字冲突.使用命名空间std.而之前的库函数都存放于< .h>中,如今成为伪标准库.而不能直接将这些头文件所有直接 ...
- saltstack之软件管理
1.installed安装软件包 例: 安装NFS /srv/salt/pkg/nfs.sls nfs: pkg.installed: - pkgs: - nfs-utils 在命令行执行如下 sal ...
- VS使用WEB DEPLOY发布
背景是这样的,公司有两台服务器,平时一台备用,另一台做为主生产机器.当有大量补丁或者安装什么东西需要重启的时候,交其中一台直接关掉IIS,然后重启即可,此时另一台负责处理用户请求. 之前一台服务器一个 ...