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

    

时间: 2024-08-17 18:29:35

Python(八)-面对对象编程扩展的相关文章

Python(七)-面对对象编程

第一章 面向对象设计的问题 1.什么是面向对象编程          -- 以前使用函数来实现,使用函数比较复杂的实现,现在使用面向对象,实现起来更简单.          -- 面向对象就是现在就是用类和对象来进行实现     2.什么是类?什么是对象?两者又有什么关系?         -- 类里面就是函数的集合         -- 例如:obj = 类名(),             obj就是对象,这个过程叫做实例化的过程,最后调用时使用对象名.函数()的格式进行调用,例如:obj.函

python接口自动化九--面对对象编程二,搭建测试环境,多线程与多进程

1.面对对象编程 1.1 基本概念 实例方法:在类里面定义的函数都是实例方法,函数内有self变量 类方法: 不可以实例化,直接用类名调用 类方法可以使用类变量,cls.xxx 实例可以通过self.xx使用类方法 类方法里面不能使用实例方法和实例变量 静态方法: 定义在类里的普通函数 用不了实例方法,实例变量,类方法,类变量 不需要实例化,直接用类名调用 ? 属性方法: 是实例方法 不能有入参 用它的时候,直接m.func,把它当做变量来使用,后面不需要加括号 它是获取函数的返回值 析构函数:

面对对象编程七大原则

面对对象编程七大原则: 1. OCP 全称:“Open-Closed Principle” 开放-封闭原则 说明:对扩展开放,对修改关闭. 优点:按照OCP原则设计出来的系统,降低了程序各部分之间的耦合性,其适应性.灵活性.稳定性都比较好.当已有软件系统需要增加新的功能时,不需要对作为系统基础的抽象层进行修改,只需要在原有基础上附加新的模块就能实现所需要添加的功能.增加的新模块对原有的模块完全没有影响或影响很小,这样就无须为原有模块进行重新测试. 如何实现“开-闭”原则 在面向对象设计中,不允许

跟着百度学PHP[4]OOP面对对象编程-7-OOP的一些关键子讲解

面对对象常用的一些关键子:http://www.cnblogs.com/xishaonian/p/6146794.html排版不是很好望见谅. THE END 跟着百度学PHP[4]OOP面对对象编程-7-OOP的一些关键子讲解

跟着百度学PHP[4]OOP面对对象编程-5-内部引用$this

$this就是对象内部代表这个对象的引用 可以调用被封装的方法或者属性! <?php class Person{ private $name; private $age="21"; var $sex; function play(){ echo "他正在玩儿呢"; } private function Hello(){ //使用private封装hello方法.该方法不可直接调用.但是可以在内部使用$this调用. echo "这个是被封装的内容&q

js面对对象编程

说到js,很大一部分人会说我很熟悉,在日常的web开发中经常用,那么你的js代码是符合面对对象思路的吗?那你会问我面向过程的js代码有什么不好吗?我的感受是面对对象的js编码更加简洁,减少了混乱,可维护行增强,适合编写富客户端时应用. 好了,首先看看js里如何定义对象: <html> <head> <script type="text/javascript"> var obj=new Object(); obj.name='josh'; obj.ag

跟着百度学PHP[4]OOP面对对象编程-12-抽象类

什么是抽象方法?我们在类里面定义的没有方法体的方法就是抽象方法.所谓的没有方法体指的是,在方法声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时还要加一个关键字“abstract”来修饰. 目录==================================== 1.声明一个抽象类,抽象方法(案例一) 2.继承一个抽象类(实例二) ======================================= 案例一 <?php abstract

跟着百度学PHP[4]OOP面对对象编程-12-对象接口技术(interface)

PHP与大多数面向对象编程语言一样,不支持多重继承.也就是说每个类只能继承一个父类. 接口正是解决每个类只能继承一个父类这个问题的 接口用什么权限,继承的那个方法也要使用什么权限. 接口的声明使用:interface 接口的继承使用:implements 目录++++++++++++++++++++++++++++++++++++++++++++ 00x1 接口的声明以及接口的引用(案例一) 00x2 如何继承多个接口(案例二) 00x3 判断某个对象是否实现了某个接口(案例三) +++++++

跟着百度学PHP[4]OOP面对对象编程-7-封装性private

所谓封装顾名思义,如同箱子般给封装起来.结合前面的来说就是对属性或者方法,封装后的方法或属性只能有类内部进行调用.外部调用不了. 封装性的好处: 1.信息隐藏 2.http://www.cnblogs.com/yisss/p/3412702.html 3.https://zhidao.baidu.com/question/2203595698703331308.html 目录------------------------------------- 00X1 进行封装 00x2 如何调用封装的属