1.python中的两个特殊方法(以两个下划线开始和两个下划线结束的方法,也称为魔法方法,为python自带的方法):(1)构造方法:__init__ 具有初始化的作用,也就是
当该类被实例化的时候就会执行该函数。那么我们就可以把要先初始化的属性放到这个函数里面,只要把init方法的名字从简单的init修改为__init__即可:def __init__(self): 。(2)“__del__”就是一个析构函数,
当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间。如以下代码:
-
>>> class test(object):
-
def __init__(self):
-
print ("test init")
-
def __del__(self):
-
print ("test del")
-
-
-
>>> T=test()
-
test init
-
>>> del T
-
test del
-
>>>
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),函数就会被挂起:即函数停在那点等待被激活。函数被激活后就从停止的那点开始执行.
阅读(2672) | 评论(0) | 转发(0) |