zoukankan      html  css  js  c++  java
  • 类----简单总结

    类的构成

     1 class 类名:
     2     def __init__(self,参数1,参数2):
     3         self.对象的属性1 = 参数1
     4         self.对象的属性2 = 参数2
     5 
     6     def 方法名(self):pass
     7 
     8     def 方法名2(self):pass
     9 
    10 对象名 = 类名(1,2)  #对象就是实例,代表一个具体的东西
    11                   #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法
    12                   #括号里传参数,参数不需要传self,其他与init中的形参一一对应
    13                   #结果返回一个对象
    14 对象名.对象的属性1   #查看对象的属性,直接用 对象名.属性名 即可
    15 对象名.方法名()     #调用类中的方法,直接用 对象名.方法名() 即可
    类的总结


    继承

    1.继承是一种创建新类的方式

    2.新建的类可以创建一个或多个父类,父类有称为基类或者超类

    3.新建的类称为派生类或者子类

    在python中类的继承分为:单继承或多继承

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class ParentClass1: #定义父类
        pass
     
    class ParentClass2: #定义父类
        pass
     
    class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass
        pass
     
    class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类
        pass

    4.查看所有继承的父类

    print(Person.__bases__)      #__base __只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类

    如果没有指定父类,python会默认继承object类,object是所有python的父类。

    经典类:在python2中,class Dad: 不会继承object,这样的类叫做经典类(它叫经典类,不是因为它经典,而是因为它比较老)

    新式类:在python3中,python会默认继承object类(一切皆对象)

        class Dad  就相当于python2中的  class Dad(object)  #新式类

    而且python3中没有经典类了

    5.继承与抽象(先抽象后继承)

    抽象:抽取类似或者说比较像的部分(也就是提取一类事物的特点,范围越来越大,共性越来越少)

        是从大范围到小范围的过程

    继承:是基于抽象的过程,通过编程语言去实现它,肯定是先经历抽象这个过程,才能通过继承的方式去表达出抽象的结构

          是从小范围到大范围的过程

    钻石继承

    新式类:广度优先:横着找(如钻石继承图,谁先在前面就找谁)

    经典类:深度优先:从上到下找

    6.派生:(相对论)

      1.在父类的基础上产生子类,产生的子类就叫做派生类

      2.父类里没有的方法,在子类中有了,这样的方法就叫做派生方法。

      3.父类里有,子类也有的方法,就叫做方法的重写(就是把父类里的方法重写了)

    7.注意的几个概念:

      1.子类可以使用父类的所有属性和方法

      2.如果子类有自己的方法,就执行自己的;如果子类没有自己的方法,就会找父类的。

      3.如果子类里面没有找到,父类里也没有找到,就会报错

      4.如果子类中实现了调用父类的方法

        在类内:super(子类,self).方法名()  supper().__init__(参数)

        在类外:super(子类名,对象名).方法名()

    8、接口类

    接口提取了一群类共同的函数,可以把接口当做一个函数的集合。

    然后让子类去实现接口中的函数。

    这么做的意义在于归一化,什么叫归一化,就是只要是基于同一个接口实现的类,那么所有的这些类产生的对象在使用时,从用法上来说都一样。

    归一化,让使用者无需关心对象的类是什么,只需要的知道这些对象都具备某些功能就可以了,这极大地降低了使用者的使用难度。

    比如:我们定义一个动物接口,接口里定义了有跑、吃、呼吸等接口函数,这样老鼠的类去实现了该接口,松鼠的类也去实现了该接口,由二者分别产生一只老鼠和一只松鼠送到你面前,即便是你分别不到底哪只是什么鼠你肯定知道他俩都会跑,都会吃,都能呼吸。

    再比如:我们有一个汽车接口,里面定义了汽车所有的功能,然后由本田汽车的类,奥迪汽车的类,大众汽车的类,他们都实现了汽车接口,这样就好办了,大家只需要学会了怎么开汽车,那么无论是本田,还是奥迪,还是大众我们都会开了,开的时候根本无需关心我开的是哪一类车,操作手法(函数调用)都一样

     1 借用abc模块来实现接口
     2 #接口类(就是为了提供标准,约束后面的子类)
     3 from abc import ABCMeta,abstractmethod
     4 class Payment(metaclass=ABCMeta):
     5     @abstractmethod
     6     def pay(self,money):
     7         pass
     8 
     9 class Wechatpay(Payment):
    10     def fuqian(self,money):
    11         '''实现了pay的功能,但是方法名字不一样'''
    12         print('微信支付了%s元'%money)
    13 
    14 class Alipay:
    15     def pay(self,money):
    16         print('支付宝  支付了%s' %money)
    17 
    18 # p = Wechatpay() #报错了(因为上面定义了一个接口类,接口类里面
    19 # 定义了一个pay方法,而在下面的Wechatpay方法里没有pay方法,不能
    20 # 调用,在接口类里面约束一下,接口类里的pay方法里面不能写其他,直接pass)
    21 a = Alipay()
    22 a.pay(200)
    23 p = Payment() #接口类不能被实例化
    使用内置模块abc实现接口类

    单例模式

    类的调用

  • 相关阅读:
    Data Load Performance Optimization
    SAPBW数据仓库增量更新(转载)
    BW数据源深入研究
    SAP BW权限
    利用HTTP协议的特性进行拒绝服务攻击的一些构思
    Python自省(反射)指南 转自http://www.cnblogs.com/huxi/archive/2011/01/02/1924317.html
    交换网络中的sniffer讨论>基于交换网络的ARP spoofing sniffer
    Windows中使用精确计时器
    HTTP POST和GET的区别
    HTTP 状态代码 错误列表
  • 原文地址:https://www.cnblogs.com/xiesibo/p/8449435.html
Copyright © 2011-2022 走看看