python--面向对象的三大特征---封装、继承、多态

news2024/10/7 4:25:21

1.封装:

        1,在面向对象中,封装指的是一种安全机制,不让外界修改或者直接操作,将属性私有化; 

              如果要访问属性,提供公开的方法(getter,setter)

        2.  python的类如何私有化成员(属性,方法)

             原有的属性或者方法名前加__                ==>两个_ _

             封装后的属性或者方法,只能在类的内部调用!!!

        3,python为我们提供了三种不同的封装方式

                        1,标准写法:封装属性,提供get和set方法

                        2,propterty全局函数,封装get和set方法,在返回一个新的属性

                        3,@propterty和@名称.setter实现   



# 求圆的周长和面积

class Circle(object):

    def __init__(self, r, pi):
        self.r = r
        self.PI = pi

    def get_area(self):
        return self.r ** 2 * self.PI

    def get_zc(self):
        return 2 * self.r * self.PI


class Juxing(object):

    def __init__(self, width, height):
        self.__width = width
        self.__height = height

    def get_width(self):    #get封装方法相当于钥匙,限制外界访问
        return self.__width

    def set_width(self, width):     #set方法相当于设置钥匙,有了set,外界可以设置值
        self.__width = width

    def area(self):
        #封装后的属性和方法,只能在类内部使用
        self.__my_speak()
        return (self.__width + self.__height) * 2

    def zc(self):
        self.__my_speak()
        return self.__height * self.__width

    def __my_speak(self):
        #该方法只能在类内部只用,所以私有化这个方法,外界无法访问该方法
        print("我是一个矩形,欢迎使用我")

if __name__ == '__main__':
    # c1 = Circle(2, 3.14)
    # print(c1.get_area())
    # juxing = Juxing(2, 3)
    # print(juxing.area(), juxing.zc())

    w = float(input("请输入矩形的宽:"))
    h = float(input("请输入矩形的高:"))
    a = Juxing(w, h)
    print(f"该矩形的面积是{a.area()},周长为{a.zc()}")

    # 修改宽--set方法修改封装后的属性
    a.set_width(w * 2)
    print(f"该矩形的面积是{a.area()},周长为{a.zc()}")

运行结果: 

请输入矩形的宽:5
请输入矩形的高:5
我是一个矩形,欢迎使用我
我是一个矩形,欢迎使用我
该矩形的面积是20.0,周长为25.0
我是一个矩形,欢迎使用我
我是一个矩形,欢迎使用我
该矩形的面积是30.0,周长为50.0

2.继承:子类会继承父类的一些属性或者方法

class 子类(父类[,父类2,父类3]) :

注意:子类继承父类时,不是所有的属性和方法都会继承;是继承能够继承的类成员

注意:继承主要解决的是代码复用问题,将多个子类需要用的方法,可以定义在父类中

class Man(object):

    def __init__(self):
        self.__name = "ma"
        self.company = "alibb"
        self.money = 10000000

    def speak(self):
        print("我对钱不感兴趣")
        print("我最后悔的一件事创建了albb")

    def __talk(self):
        print("这个是封装,是私有方法,我不想告诉别人")


class Son(Man):

    def __init__(self):
        #super表示父类
        super().__init__()
        self.name = "我叫儿子"
        self.age = 18


if __name__ == '__main__':
    s1 = Son()
    print(s1.money)
    print(s1.company)
    s1.speak()

 运行结果:

10000000
alibb
我对钱不感兴趣
我最后悔的一件事创建了albb

3,多态

                一个事务有多种状态,

                在继承的基础上,父类引用指向子类实例对象的现象

                python是弱数据类天生支持多态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1577642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Mybatis】Mybatis 二级缓存全详解教程

【Mybatis-Plus】Mybatis-Plus 二级缓存全详解 一,Mybatis-Plus介绍 MyBatis-Plus(简称MP)是一个基于 MyBatis 的增强工具,它简化了 MyBatis 的开发,并且提供了许多便利的功能,帮助开发者更高效地进行持久…

基于java+springboot+vue实现的健身房管理系统(文末源码+Lw)23-223

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装健身房管理系统软件来发挥其高效地信息处理的作用&#xf…

如何实现无感刷新(附前后端实现)?

无感刷新的核心思路: 无感刷新机制的目的是在用户不知情的情况下,自动更新其认证令牌(通常是Access Token),以保证用户的会话不会中断。这通常涉及到两种类型的令牌: Access Token:它是用户进行…

C++:if语句(20)

介绍 c最基本的三种程序运行模式为:顺序执行,判断执行,循环执行 顺序执行:前面我们的代码都是从上往下,依次执行的,这就是按顺序依次执行 判断执行:通过我们写的判断条件,去判断要不…

算法:完全背包问题dp

文章目录 一、完全背包问题的特征二、定义状态三、状态转移四、降维优化五、参考例题5.1、Acwing:3.完全背包问题5.2、Acwing:900. 整数划分 一、完全背包问题的特征 完全背包问题是动态规划中的一种经典问题,它的主要特征可以总结如下&…

重学SpringBoot3-事件与监听器

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-事件与监听器 事件和监听器的基本概念Spring Boot中的事件类型1. ApplicationStartingEvent2. ApplicationEnvironmentPreparedEvent3. ApplicationCont…

【InternLM 实战营第二期笔记】使用茴香豆搭建你的RAG智能助理

RAG RAG是什么 RAG(Retrieval Augmented Generation)技术,通过检索与用户输入相关的信息片段,并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺乏透明、可追…

2024年阿里云优惠券(代金券)在哪里领取?

阿里云作为国内领先的云计算服务提供商,不仅提供了稳定、高效的云服务,还时常推出各种优惠活动,以此来吸引用户上云。其中,阿里云优惠券就是一种常见的优惠方式。那么,在2024年,我们该如何领取阿里云优惠券…

在自定义数据集上微调 YOLOv9 模型

在自定义数据集上微调 YOLOv9模型可以显着提高目标检测性能,但这种改进有多显着呢?在这次全面的探索中,YOLOv9在SkyFusion数据集上进行了微调,分为三个不同的类别:飞机、船舶和车辆。通过一系列广泛的实验,包括修改学习率、图像大小和战略性冻结主干网,已经实现了令人印…

5. python练习题5-存款、收益率计算

5. python练习题5-存款、收益率计算 【目录】 文章目录 5. python练习题5-存款、收益率计算1. 目标任务2. 解题思路3. 知识回顾3.1 Python赋值运算符3.2 列表的append函数3.3 round()函数—保留小数点位数3.4 f格式化字符串3.5 列表求和方法 4. 程序代码4.1 使用循环结构实现4…

【强化学习的数学原理-赵世钰】课程笔记(二)贝尔曼公式

【强化学习的数学原理-赵世钰】课程笔记(二)贝尔曼公式 一. 内容概述 1. 第二章主要有两个内容 (1)一个核心概念:状态值(state value):从一个状态出发,沿着一个策略我…

linux安装dubboAdmin

1.环境准备: jdk-8u391-linux-x64apache-maven-3.9.6apache-tomcat-8.5.100 2.安装注册中心zookeeper zookeeper的安装看我的另一篇文章,安装完成后保持启动状态 linux安装Zookeeper的详细步骤-CSDN博客 3.安装dubboadmin 源码下载地址:R…

隔离放大器 分类 及说明

无源传感器隔离配电及信号采集传输 ●前置放大、电桥等电路配置电源方便采集信号 ●PLC、DCS现场模拟信号隔离、采集 ●直流电流/电压信号的隔离、转换及放大 ●模拟信号地线干扰抑制及数据隔离、采集 ●工业现场信号隔离及长线传输 ●仪器仪表与传感器信号收发 ●电力监控、医…

【Django开发】0到1美多商城项目md教程第6篇:账号登录,1. 用户名登录逻辑分析【附代码文档】

美多商城完整教程(附代码资料)主要内容讲述:欢迎来到美多商城!,项目准备。展示用户注册页面,创建用户模块子应用。用户注册业务实现,用户注册前端逻辑。图形验证码,图形验证码接口设…

Windows:IntelliJ IDEA Ultimate 安装 PHP 插件

在 IntelliJ IDEA Ultimate 中安装 PHP 插件,支持PHP开发调试 首先,进入File > Setting: 再次选择Plugins,然后选择上面的 Marketplace。 在搜索栏中输入 PHP,然后单击左侧的 Install 进行安装就可以了。 安装成功…

SD-WAN组成及关键技术解析

云桥通SD-WAN作为下一代网络连接技术,由控制平面、数据平面和管理平面三部分组成,共同构建了灵活、可管理和高效的网络架构。 1、控制平面: 控制平面负责决策制定和流量管理,在云桥通SD-WAN网络中扮演关键角色。基于软件定义网络…

转圈游戏——快速幂

目录 题目 思路 代码 题目 思路 每个小朋友移动一次的位置为,移动 q 次的位置则为。那么题目要求移动 ,最后的位置为 。 但 的范围是,而总的移动次数是 。时间复杂度是在,因此是一定不能硬算的,肯定会超时。那么该…

【架构七】Hadoop

什么是Hadoop? Hadoop是一个存储系统计算框架的软件大数据处理框架。 Hadoop的核心,说白了就是HDFS和MapReduce,HDFS为海量数据提供了存储,而MapReduce为海量数据提供了计算框架。HBase是一个分布式的、面向列的开源数据库。属于Nosql。 …

微信小程序之事件

1、什么是事件 UI界面的程序需要和用户互动,例如用户可能会点击你界面上某个按钮,又或者长按某个区域,这类反馈应该通知给开发者的逻辑层,需要将对应的处理状态呈现给用户。 有些时候程序上的“行为反馈”不一定是用户主动触发的&…

详解简单的shell脚本 --- 命令行解释器【Linux后端开发】

首先附上完整代码 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h> //命令行解释器 //shell 运行原理&#xff1a;通过让子进程执行命令&#xff0c;父进…