Python 面向对象的特性

文章介绍了面向对象编程的三大特性——封装、继承和多态,以及鸭子类型的编程概念。封装用于保护隐私和隔离复杂度,通过创建类和对象以及设置访问权限实现。继承允许代码复用,包括单继承和多继承,以及方法的重写。多态则是通过不同子类对象调用相同方法产生不同结果,增加了代码的灵活性。文章还给出了一个基于Python的Circle类示例,展示了如何创建和使用类来计算圆的周长和面积。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象编程的三大特性:封装、继承、多态。

一、封装

       封装是对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,其他程序无法调用。封装离不开“私有化”,就是将类或者函数中的某些属性限制在某个区域内,外部无法调用。

       为什么要进行封装?

               1、保护隐私(把不想别人知道的东西封装起来)

               2、隔离复杂度(把实现某个功能的方法封装在一个“黑匣子”里,提供给用户的只是一个                 入口,通过入口就能实现该功能)

       封装的两个层面

               1、创建类和对象会分别创建二者的名称空间,我们只能用类名.或obj.的方式去访问里面                 的名字,这本身就是一种封装。

               2、类中把某些属性和方法隐藏起来(或定义成私有的),只在类的内部使用,外部无法                 访问,或留少量入口(函数)供外部访问。

二、继承

       继承是实现代码复用的重要手段,如果一个新类继承自一个设计好的类,就直接具备了已有类的特征,大大降低了工作难度。已有类,我们称为父类或者基类,新的类,我们称为子类或者派生类。

       继承的种类

       1、单继承(深度优先机制)son------> father------> geangfather

       单继承指子类只继承一个父类,当对象调用方法时,查找顺序先从自身类找,如果自身类没找到,则去父类找,父类没有,则去,父类的父类找,直到object类。

       2、多继承

       多继承指子类继承多个父类,并且具有他们的特征。

       ①遵循左边优先原则

    father                             father

        |_______  son  _______|

       ②左边优先一条路走到黑

grandfather

        |

    father                         father

        |_______ son ______|

       ③同根根最后执行

        ____ grendfather____

    father                          father     

        |_______ son ______|           

       查看继承顺序: __mor__()

       3、方法的重写   super()

       当子类与父类拥有同名称的方法时,子类对象调用该方法优先执行自身的方法。实际上就是子类方法的方法覆盖父类的方法,也称为重写。实际的开发中,遵循开放封闭原则。我们并不会完全的重写父类的方法,而是希望同时实现父类的功能。

三、多态

       多态:指的是一类事物有多种形态,一个抽象类有多个子类(因而多态的概念依赖于继承),不同的子类对象调用相同的方法,产生不同的执行结果,多态可以增加代码的灵活性。 

       实现多态的步骤:

               1、定义一个父类,实现某个方法。

               2、定义多个子类,在子类中重写父类的方法,每个子类方法实现不同的功能。

               3、假设我们定义了一个函数,需要一个父类类型对象的参数,那么调用函数的时候,传         入父类不同的子类对象,那么这个函数就会执行不同的功能,这就是多态的体现。

       多态的意义:

               1、在程序运行过程中展现出动态的特性,在程序编译的时候无法知道调用的是哪个函                     数。

               2、程序重写必须多态实现,负责没有意义。

               3、多态是面向对象组件化程序设计的基础特性。

四、鸭子类型

       鸭子类型不要求严格的继承体系,关注的不是对象类型本身,而是它是否具有要调用的方法。

例题:

    1、设计一个circle类来表示圆,这个类包含圆的半径以及求周长和面积的函数。
    2、再使用这个类创建半径为1-100的圆,并计算出相应的周长及面积。
import math


class Circle(object):
    def __init__(self, r):
        self.r = r
        self.c = 1
        self.s = 1

    def func2(self):
        self.s = math.pi * (self.r ** 2)
        return self.s

    def func3(self):
        self.c = 2 * math.pi * self.r
        return self.c


def func():
    for i in range(1, 101):
        j = Circle(i)
        print(f'半径为{i},其周长为{j.func3()},面积为{j.func2()}!')


if __name__ == '__main__':
    func()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JIEZAIYOU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值