Chinaunix首页 | 论坛 | 博客
  • 博客访问: 289870
  • 博文数量: 46
  • 博客积分: 528
  • 博客等级: 中士
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-20 15:36
文章分类

全部博文(46)

文章存档

2017年(1)

2015年(8)

2014年(2)

2013年(19)

2012年(16)

分类: Python/Ruby

2013-06-17 10:01:21

1.python中的两个特殊方法(以两个下划线开始和两个下划线结束的方法,也称为魔法方法,为python自带的方法):(1)构造方法:__init__ 具有初始化的作用,也就是当该类被实例化的时候就会执行该函数。那么我们就可以把要先初始化的属性放到这个函数里面,只要把init方法的名字从简单的init修改为__init__即可:def __init__(self): 。(2)“__del__”就是一个析构函数,当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间。如以下代码:

  1. >>> class test(object):
  2.     def __init__(self):
  3.         print ("test init")
  4.     def __del__(self):
  5.         print ("test del")

  6.         
  7. >>> T=test()
  8. test init
  9. >>> del T
  10. test del
  11. >>>
2.子类调用超类的构造方法:在自己的构造方法内添加:SuperClass.__init__(self)。在调用一个实例的方法时,该方法的self参数会被自动绑定到实例上。但如果直接调用类的方法(比如上面的那句代码),那么就没有实例会被绑定。这样就可以自由地提供需要的self参数。这样的方法称为未绑定方法。通过将当前的实例作为self参数提供给未绑定方法,子类就能够使用其超类构造方法的所有实现。
3.使用super函数:super函数只能在新式类中起作用。所以需要在超类上方使用__metaclass__=type这句代码来声明此超类是一个新式类(使用新式类的好处是可以和旧式类兼容,且新式类拥有旧式类没有的一些方法,如__init__等等)。然后在子类的构造方法中使用super(SonClass,self).__init__()就可以调用超类的构造方法了(SonClass是子类)。
4.property函数:在新式类中应该使用property函数而不是访问器方法(get,set方法)。property函数可以用0,1,2,3或者4个参数来调用。如果没有参数,产生的属性既不可读也不可写。如果只是用一个参数调用(即只有一个取值方法),产生的属性是只读的,第三个参数(可选)是一个用于删除特性的方法。第四个参数是一个文档字符串。property的4个参数分别被叫做fget,fset,fdel和doc。
5.静态方法和类成员方法:静态方法和类成员方法分别在创建时分别被装入staticmethod类型和classmethod类型的对象中。静态方法的定义没有self参数,且能够被类本身直接调用。类方法在定义时需要名为cls的类似于self的参数,类成员方法可以直接用类的具体对象调用。cls参数是自动被绑定到类的。可以使用@staticmethod和@classmethod这样的装饰器在方法上进行修饰。
6.为了在访问特性的时候可以执行代码,必须使用一些魔法方法,如下:__getattribute__(self,name):当特性name被访问时自动被调用(只能在新式类中使用)。__getattr__(self,name):当特性name被访问且对象没有相应的特性时被自动调用。__setattr__(self,name,value):当试图给特性name赋值时会被自动调用。__delattr__(self,name):当试图删除特性name时被自动调用。
7.迭代器:__iter__方法返回一个迭代器,这个迭代器具有next方法。一个实现了__iter__方法的对象是可迭代的,一个实现了next方法的对象则是迭代器。
8.生成器:任何包含yield语句的函数称为生成器。它的行为和普通的函数有很大的差别。它不是像return那样返回值,而是每次产生多个值。每次产生一个值(使用yield),函数就会被挂起:即函数停在那点等待被激活。函数被激活后就从停止的那点开始执行.
阅读(2612) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~