类----简单总结

类的构成

 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实现接口类

 

 

 

单例模式

类的调用

 

posted @ 2018-02-15 17:57  xiesibo  阅读(134)  评论(0编辑  收藏  举报