目录

一、封装

二、类的继承

三、多态性


python编程的重点是面向对象编程,而面向对象编程的核心方法就是封装、继承和多态。

一、封装

        先简单介绍下封装,个人理解说就是把数据和方法封起来,然后装到一个类里,使用者不关注里面的实现逻辑,只需要传符合规定的参数,调用对应的方法,就能得到结果,类就是多个相关功能函数的封装。

写个简单的例子:

class Jisuan():     #定义一个计算的类
    def __init__(self,x,y):   #设置属性x,y
        self.x = x     #定义属性x
        self.y = y     #定义属性y
    def add2(self):    #定义一个相加方法 
        print(self.x+self.y)  #打印x和y相加的结果
    def subtract2(self): #定义一个相乘的方法
        print(self.x*self.y)  #打印相乘的结果

Atom =Jisuan(1,2)    #创建实例 Atom
Atom.add2()    #调用相加的方法 打印结果为:3
Atom.subtract2()   #调用相乘的方法  打印结果为:2

上面例子就可以理解成是一个封装,我不用关内部是怎么设计的,我只要传入两个数,如果我想让他们相加就调相加的方法,如果想让他们相乘就调相乘的方法

二、类的继承

1、继承父类       

        类的继承从字面意思就可以看出来功能,就是继承。举个现实生活的例子,父亲有一辆车、有一套房子、有100W,这些东西作为儿子也可以继承过来用,在我们定义儿子那个类的时候,就可以直接把父亲的这些继承过来。

看个例子:

class Father():    #定义一个Father的类
    def car(self):   #定义一个car的方法
        print("我有一辆车")  #打印 我有一辆车
    def house(self):  #定义一个housr的方法
        print("我有一套房子")  #打印 我有一套房
    def money(self):   #定义money的方法
        print("我有100万")  #打印 我有100万

class Son(Father):   #定义一个儿子的类,然后继承Father这个类的东西
    def marry(self): #定义一个方法 我结婚了
        print("有媳妇了")  #打印 有媳妇了

son1 = Son()   #创建实例son1
son1.money()   #调用money的方法  打印结果为:我有100万
son1.marry()   #调用marry的方法  打印结果为:有媳妇了

上面的例子可以看出来,Son的这个类下没有money这个方法,但是因为是继承了Father类,所以就可以直接使用Father类下的函数。

2、方法的复写

父亲打算捐款20W,只给自己的儿子留80W,所以就是爸爸有100W,但是儿子只有80W,这时候方法应该怎么调用呢?

这样的话就可以复写一个新的方法了,复写的方法使父类的方法和子类的方法名相同,然后在子类调用该方法时,就不会调用父类的方法,而是调用的就是子类新写的这个方法。

class Father():    #定义一个Father的类
    def car(self):   #定义一个car的方法
        print("我有一辆车")  #打印 我有一辆车
    def house(self):  #定义一个housr的方法
        print("我有一套房子")  #打印 我有一套房
    def money(self):   #定义money的方法
        print("我有100万")  #打印 我有100万

class Son(Father):   #定义一个儿子的类,然后继承Father这个类的东西
    def marry(self): #定义一个方法 marry
        print("有媳妇了")  #打印 有媳妇了
    def money(self):  #定义一个方法 money 
        print("我只有80万了") #打印 我只有80万了
 
son1 = Son()   #创建实例son1
father1 = Father()  #创建实例father1
son1.money()   #son1调用money的方法  打印结果为:我只有80万了
father1.money()   #father1调用money的方法  打印结果为:我有100W

如这个例子,本来Son调用money这个方法时,应该是调继承过来的父类的money方法,但是需求要求我们Son的money就是自己的money,不能使用父类的,所以在Son的类里又新写了一个money的方法,这样Son在调用money的方法时,就会调用Son类里的money方法,但是Father调用money方法时,还是调用的自己的函数里的money。

3、继承多个类

一个子类也可以继承多个父类,只需要在子类后面的()中,加上需要继承的父类就行,中间用逗号  ,  隔开。

class Father():    #定义一个Father的类
    def car(self):   #定义一个car的方法
        print("我有一辆车")  #打印 我有一辆车
    def house(self):  #定义一个housr的方法
        print("我有一套房子")  #打印 我有一套房
    def money(self):   #定义money的方法
        print("我有100万")  #打印 我有100万

class Mother():   #定义一个Mother的类
    def house(self):   #定义一个house的方法
        print("我有一个大别墅")  #打印 我有一个大别墅
    def company(self):  #定义一个company的方法
        print("我有一个公司")  #打印 我有一个公司

class Son(Mother,Father):   #定义一个儿子的类,然后继承Mother,Father这两个类的东西
    def marry(self): #定义一个方法 我结婚了
        print("有媳妇了")  #打印 有媳妇了
    def money(self):  #定义一个方法 Money
        print("我只有80万了") #打印  我只有80万了

son1 = Son()   #创建实例son1
son1.house()   #调用house的方法  打印结果为:我有一个别墅
son1.company()  #调用父类的company方法 打印结果为:我有一个公司

就像这个例子,我有新建了一个Mother的父类,然后继承给了Son,这时候Son就可以用Mother里的方法了,但是如果继承的两个父类里有同一个方法时,在子类继承时,()里那个父类在前面,就会调用谁的方法,比如上面调用的house方法,Father的是一套房子,Mother的是一个大别墅,但是因为继承时,Mother写在了前面,所以Son在调用时,就调用的Mother的house方法。

三、多态性

        多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数,可以简单理解为在不同的类里同一个名称的函数实现了不同的方法,上面方法复写也属于函数多态性的一种,money方法在不同的实例里实现了不同的功能,可以看个简单的例子。

class Animal():   #定义一个Animal类
    def talk(self):   #定义一个talk的方法
        print("会叫")  #打印 会叫

class Dog(Animal):   #定义一个 Dog类
    def talk(self):  #定义一个talk的方法
        print("会 汪汪汪 叫")  #打印  会 汪汪汪 叫

class Cat(Animal):   #定义一个Cat的类
    def talk(self):  #定义一个talk的方法
        print("会 喵喵喵 叫")  #打印  会 喵喵喵 叫

animal = Animal()  #实例化类Animal
animal.talk()      #调用talk方法  打印结果为:会叫
dog = Dog()  #实例化类Dog
dog.talk()      #调用talk方法  打印结果为:会 汪汪汪 叫
cat = Cat()  #实例化类Cat
cat.talk()      #调用talk方法  打印结果为:会 喵喵喵 叫

比如这个例子中,在调用Dog和Cat类的talk方法时,Dog和Cat类都有本身的talk方法和继承过来的Animal的talk方法,在调用时,优先查找本身的talk方法,如果没有的话再去调父类的talk方法,这个就可以称之为多态。