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创建的。

    

原文地址:https://www.cnblogs.com/cxcx/p/6137150.html