1.类的比较
class A(object):
def __init__(self,value):
self.value = value
def __eq__(self,other):
return self.value == other.value
def __ne__(self,other):
return self.value != other.value
def __gt__(self,other):
return self.value > other.value
def __lt__(self,other):
return self.value < other.value
def __ge__(self,other):
return self.value >= other.value
def __le__(self,other):
return self.value <= other.value
 
 
a = A(100)
b = A(200)
 
print ( a == b)
print ( a != b)
print ( a > b)
print ( a < b)
print ( a >= b)
print ( a <= b)
 
备注:__cmp__也是用于比较的,a>b返回1,a<b返回-1,a=b返回0
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
2.__new__,__init__,__del__
__new__方法,元类里面用到
__init__方法,构造函数,实例化对象的时候用到
__del__方法,简单理解为是一个析构函数,当一个对象被垃圾回收机制回收的时候,其实就是调用了该方法,可以在该方法中定义一些释放资源的操作,如文件的关闭,数据库连接的关闭等(用得不多)
 
3.__str__方法,定义了我们使用str方法直接print一个对象的行为:
class S(object):
def __init__(self,value):
self.a = value
self.b = value
def __str__(self):
return "a=%s b=%s" % (self.a,self.b)
value = S("hello")
print (value)
 
4.__repr__类似于__str__,不过__repr__ 返回的是机器可读的字符串,__str__返回的是人类可读的
 
5.__unicode__返回一个unicode的对象u'hello',类似于__str__方法。
 
6.__hash__,我们定义类的时候是不需要定义__hash__方法的,因为父类object已经定义过了
 
7.__getattr__方法,当一个实例有这个属性的时候直接返回,如果没有会调用该方法
class Test(object):
def __init__(self):
self.a = 1
def __getattr__(self,name):
print ("get attr %s" % name)
 
t = Test()
print t.a
 
t.b
运行返回结果为
1
get attr b
总结:__getattr__的作用就是,当我里面定义了a这个实例变量,我打印它的时候它的值就是a的值1,当我没有定义b这个实例变量的时候,我强行t.b如果没有__getattr__这个方法就会报错,但是如果有这个方法它就会将b赋值给变量name然后打印出来。
 
8.__enter__和__exit__,在IO的部分说过with语法,只要一个类实现了这个两个方法就可以使用with语法:
class W(object):
def __init__(self):
self.f = open('/tmp/text.txt','w')
def __enter__(self):
return self.f
def __exit__(self,*excinfo)
#该方法接受一个可变参数,出现异常的时候将异常传值给该参数,
#在该函数内根据异常可以做相应的处理
self.f.close()
with W() as f:
print (f.closed())#看这个时候text.txt有没有关闭
f.write("hello,world") #向文件中写一行内容
 
print f.closed()#再看这个时候text.txt有没有关闭
 
上例仅仅是个演示,演示了为什么我们可以使用with语法,它会自动关闭文件。
 
class W(object):
def __init__(self):
self.f = open('/tmp/text.txt','r')
def __enter__(self):
return self.f.readlines()
def __exit__(self,*excinfo)
self.f.close()
with W() as f:
for l in f:
print (l)
 
 

最新文章

  1. 初学c# -- 学习笔记(五) winfrom自定义滚动条
  2. Jenkins实现测试环境到生产环境一键部署(Windows)
  3. jQuery 控制表单和表格
  4. Delphi 使用CHM文件制作系统帮助文档(上下文感知帮助的制作)
  5. C#_控件——DropDownList
  6. MapReduce编程实现学习
  7. 又一枚神器:nginx
  8. silverlight 文本框只能输入数字
  9. POJ 1988 Cube Stacking(带权并查集)
  10. iOS 开发的9个超有用小技巧
  11. mapreduce实现全局排序
  12. 计算方法(三)C#矩阵类库
  13. src 和 href 的区别
  14. CentOS使用nginx部署https服务
  15. Linux常用命令(一)查看日志
  16. mysql的索引设计原则以及常见索引的区别
  17. Sklearn-RandomForest
  18. 【Raspberry Pi】openwrt 路由
  19. 解决Visual C++ Redistributable for Visual Studio 2015的安装问题(摘录)
  20. linux下开发C语言需要安装的manpages手册

热门文章

  1. Today&#39;s missions
  2. Linux学习笔记-第4天- linux命令有很多,不要求全会,常用的一定要能够熟练使用
  3. &lt;Random&gt;382 380
  4. 第02组 Beta冲刺(3/4)
  5. 比较两个jar包的版本号
  6. 第04组 Alpha冲刺(2/6)
  7. Scala 准引用 - Quasiquote介绍
  8. k8s-jenkins x CI/CD 动态创建slave---01
  9. 使用maven-resources-plugin插件分环境配置
  10. vertica单节点故障恢复 Startup Failed, ASR Required