首页 > 代码库 > Python(八)-面对对象编程扩展
Python(八)-面对对象编程扩展
第一章 、面向对象扩展内容
1.1抽象接口
描述:创建基类,即抽象接口是为了来实现一个程序的架子,完成一系列的功能,然后具体的内容让子类来完成,如果不能完成,那么在调用的时候会直接报错。
作用:一般用来构建程序的一些架子,然后进行多人协作开发。
实践:
python2
#/usr/bin/env python #-*- encodeing:utf-8 -*- import abc #模块必须掉入 class Alert(object): #创建一个基类 __metaclass__ = abc.ABCMeta #语法 @abc.abstractmethod #装饰下面的方法为抽象方法 def send(self): #需要实现方法 pass class MailAlert(Alert): #子类继承基类 pass #如果不实现 m = MailAlert() #python2中在实例化中就会报异常 m.send 错报信息: Traceback (most recent call last): File "抽象类_python2.py", line 12, in <module> m = MailAlert() TypeError: Can‘t instantiate abstract class MailAlert with abstract methods send
python3
#/usr/bin/env python3 class Alert(object): def send(self): raise NotImplementedError #给这个send方法添加一个报错信息。 class MailAlert(Alert): pass m = MailAlert() m.send() 报错信息: Traceback (most recent call last): File "/Users/chenxin/s15/day8/抽象类_python3.py", line 12, in <module> m.send() File "/Users/chenxin/s15/day8/抽象类_python3.py", line 6, in send raise NotImplementedError #给这个send方法添加一个报错信息。 NotImplementedError
1.2 静态方法
描 述:静态方法不用实例化就可以调用,直接用类名像调用变量一样,静态方法就是已经和类没什么关系了,唯一的关系就是使用类名进行调用它。
作 用:每一次实例化都会开辟一块内存空间,有内存的开销,如果有上万的实例,就会耗费大量的实例,就要思考要不要用这个静态方法,进行剩内存空间。
使用方法:在类中的方法上进行@staticmethod的装饰器。
特 点:静态方法既不能访问公有属性,也不能访问实例属性。
实 例:
class cc(object): def __init__(self,name): self.name = name @staticmethod def ect(name,food): print(‘%s is eating ..%s.‘%(name,food)) p= cc(‘陈鑫‘) p.ect(‘chenxin‘,‘鸡腿‘) 结果: chenxin is eating ..鸡腿.
1.3 类方法
描 述:在类方法来讲,它就不知道实例的存在
作 用:
使用方法:在类中的方法上进行@classmethod的装饰器。
特 点:只能访问类的公有属性,不能访问实例属性
实 例:
class cc(object): name = ‘晶晶‘ def __init__(self,name): self.name = name @classmethod def walk(self): print(‘%s is walking/....‘ %self.name) p= cc(‘陈鑫‘) p.walk() 结果: 晶晶 is walking/....
1.4 属性方法
描 述:
作 用:把一个方法变成一个静态属性,就是变成一个变量,此时给人感知是访问的一个变量,其实访问的是一个方法。
使用方法:在类中的方法上进行@propery的装饰器,如果修改的方法是在创建一个相同名字的方法,在上装饰@属性方法.settr,删除为@属性方法.deleter
特 点:这样就如果带括号,就是调用的下面方法,如果不带括号就是调用的属性方法。
实 例:
class cc(object): def __init__(self,name): self.name = name @property #属性方法,的作用是吧一个方法变成一个静态属性,就是变成一个变量。此时你访问的是一个变量,其实访问的是一个方法。 def talk(self): print(‘%s says ‘%(self.name)) @talk.setter def talk(self,msg): print(‘set msg:‘,msg) @talk.deleter def talk(self): print(‘deleter talk‘) 调用: p = cc(‘chenxin‘) p.talk p.talk = ‘jjj‘ del p.talk 结果: chenxin says set msg: jjj deleter talk
第二章 、面向对象更多方法
1.1 __doc__
描 述:显示方法的描述信息
实 例:
def testfun(): """ this function do nothing , just demostrate the use of the doc string . """ pass print(testfun.__doc__)
1.2 __module__
描 述:以字符串的形式显示模块与import结合使用
1.3 __import__
描 述:以字符串的形式导入模块
1.4 __call__
描述:
1.5 __dict__
描 述:查看类或对象中所有成员
1.6 __metaclass__
描 述:自定义整个类的实例化的过程。
1.7 type()
描 述:动态创建类,所有的类底层都是type创建的。
Python(八)-面对对象编程扩展