python小白——面向对象——三大特性介绍

本文详细介绍了Python面向对象编程的三大特性:封装、继承和多态。通过实例展示了如何进行属性和方法的封装,解释了单继承、多继承以及super函数的使用。同时,讨论了构造方法、私有属性的继承以及多继承中的方法调用顺序。最后,通过示例说明了多态的概念和应用。
摘要由CSDN通过智能技术生成

封装

封装,即将类里面的属性与方法封装在类中,对外界隐藏,不让别的类进行自由访问和修改,需要以特定的方法访问。
——代码如下:

class Fengzhuang:
    #封装属性
    fz1=0
    fz2=1
    #封装方法
    def fzf(self):
        print(self.fz1,self.fz2)
fz=Fengzhuang()
fz.fzf()#在类外通过方法访问属性

继承

继承介绍以及经典类和新式类

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 ——百度百科

在python2.2之前,所有类均为经典类,python2.7中,仍然支持经典类。而在python3.x中,所有类均为新式类。

在新式类中,类的类型均为type,查找方法为广度优先(经典类是深度优先)。此外,新式类还增加了很多方法与函数。

单继承和多继承

单继承

即子类只有一个父类,代码示例如下:

class Grandfather():#默认继承Object类
    def sleep(self):
        print('Grandfather sleep')
class Father(Grandfather):#Father类继承Grandfather类
    pass

father=Father()
father.sleep()#使用Grandfather的sleep方法

其中,所有类都默认继承Object类,Object类是基类(顶级类);其他子类叫做派生类。

当子类和父类出现同名方法时,实例对象会调用子类的方法,称为覆写
——代码如下:

class Grandfather():#默认继承Object类
    def sleep(self):
        print('Grandfather sleep')
class Father(Grandfather):#Father类继承Grandfather类
    def sleep(self):#覆写父类中的sleep方法
        print('Father sleep')#输出Father sleep
father=Father()
father.sleep()

super函数

当需要使用父类的同名方法时,可以使用super函数。
——代码如下:

class Grandfather():#默认继承Object类
    def sleep(self):
        print('Grandfather sleep')
class Father(Grandfather):#Father类继承Grandfather类
    def sleep(self):#覆写父类中的sleep方法
        print('Father sleep')#输出Father sleep
        super(Father,self).sleep()#调用super方法,调用Grandfather里的sleep方法,输出Grandfather sleep

构造方法和私有的继承

构造方法的继承和普通方法、类方法和静态方法的继承一样,按一般的继承规则继承。

class Grandfather():#默认继承Object类
    def __init__(self):
        print('我是祖父')
class Father(Grandfather):#Father类继承Grandfather类
    def __init__(self):#覆写Grandfather里的构造方法
        print('我是父亲')
father=Father()#输出“我是父亲”

但是私有不同,私有不会被子类继承,只能在类内调用。
——测试代码如下:

class Grandfather():#默认继承Object类
    def __init__(self):
        print('我是祖父')
        self.__age__=90
class Father(Grandfather):#Father类继承Grandfather类
	pass
	
father=Father()
grandfa=Grandfather()	
print(father.__age__)#报错,因为没有继承属性

若想通过子类访问父类私有属性,则需要在父类中提前创建相关方法。
——代码如下:

class Grandfather():#默认继承Object类
    def __init__(self):
        print('我是祖父')
        self.__age__=90
    def get_age(self):
        print(self.__age__)
class Father(Grandfather):#Father类继承Grandfather类
	pass
	
father=Father()
father.get_age()#调用父类相关方法,输出__age__

多继承

即一个子类继承多个父类,示例如下:

class Uncle():
	pass
class Father():
	pass
class Son(Father,Uncle):#继承Father和Uncle
	pass

多继承中的查找顺序
多继承遵循左边优先原则,代码示例如下:

class Uncle():
    def sleep(self):
        print('Uncle sleep')
class Father():
    def sleep(self):
        print('Father sleep')
class Son(Father,Uncle):#多继承,Father在左
    pass

son=Son()
son.sleep()#根据左边优先原则,调用Father里的sleep,输出Father sleep

当出现以下情况时,多继承遵循左边优先、其次深度原则,优先调用Grandfather里的方法。
左边优先、其次深度
——示例代码如下:

class Grandfather():
    def eat(self):
        print('Grandfather eat')
class Uncle():
    def eat(self):
        print('Uncle eat')
class Father(Grandfather):
    pass
class Son(Father,Uncle):#多继承,Father在左
    pass

son=Son()
son.eat()#根据左边优先、深度优先原则,调用Grandfather里的eat()

出现以下情况时,即继承的两个父类有共同父类且左边父类没有所需方法,优先调用Uncle中的方法。
多继承特殊情况
代码示例如下:

class Grandfather():
    def eat(self):
        print('Grandfather eat')
class Uncle(Grandfather):
    def eat(self):
        print('Uncle eat')
class Father(Grandfather):
    pass
class Son(Father,Uncle):#多继承
    pass

son=Son()
son.eat()#调用Uncle里的eat()

多态

多态,是以封装和继承为前提,即不同的子类调用相同的方法,产生不同的结果。
——代码示例如下:

class Grandfather():
    def eat(self):
        print('Grandfather eat')
class Father(Grandfather):
    def eat(self):
        print('Father eat')
class Son(Father):
    def eat(self):
        print('Son eat')

grandfather=Grandfather()
father=Father()
son=Son()
#多态实现
grandfather.eat()
father.eat()
son.eat()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值