python中的封装和继承

news2024/11/15 19:41:51

目录

一.面向对象的三大特性

私有成员

 使用私有成员

封装小结

二.继承

pass关键字

多继承

 多继承注意事项

 小结

三.复写和使用父类成员

复写父类成员的语法

调用父类同名成员


 

一.面向对象的三大特性

面向对象编程,是许多编程语言都支持的一种编程思想。
简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发。

面向对象包含3大主要特性:

  • 封装
  • 继承
  • 多态

私有成员

现实事物有不公开的属性和行为,那么作为现实事物在程序中映射的类,也应该支持。

类中提供了私有成员的形式来支持。

  • 私有成员变量
  • 私有成员方法

定义私有成员的方式非常简单,只需要:

  • 私有成员变量:变量名以_ _开头(2个下划线)
  • 私有成员方法:方法名以_ _开头(2个下划线)

即可完成私有成员的设置

私有方法无法直接被类对象使用、私有变量无法赋值,也无法获取值

演示

class Phone:
    id=None
    produce=None
    __current_voltage=None#当前电压
    def call_by_5g(self):
        print("5g已经开启")
    def __keep_single_core(self):
        print("开启节电模式")

phone=Phone()
phone.call_by_5g()
phone.__keep_single_core

结果是

 使用私有成员

私有成员无法被类对象使用,但是可以被其它的成员使用。

演示

class Phone:
    id=None
    produce=None
    __current_voltage=0.5#当前电压
    def __keep_single_core(self):
        print("开启节电模式")
    def call_by_5g(self):
        if(self.__current_voltage>=1):
            print("5g已经开启")
        else:
            print("电量不足")
            self.__keep_single_core()

phone=Phone()
phone.call_by_5g()

结果是

封装小结

1.封装的概念是指?
将现实世界事物在类中描述为属性和方法,即为封装。

2.什么是私有成员?为什么需要私有成员?
现实事物有部分属性和行为是不公开对使用者开放的。同样在类中描述属性和方法的时候也需要达到这个要求,就需要定义私有成员了

3.如何定义私有成员?
成员变量和成员方法的命名均以_ _作为开头即可

4.私有成员的访问限制?
类对象无法访问私有成员
类中的其它成员可以访问私有成员

二.继承

继承就是一个类,继承另外一个类的成员变量和成员方法
语法:

 比如说,下图从左到右

 

 构建Phone2022类,你会选择
1.从头写一个新的类
2.基于已有的Phone类进行修改

我们可以使用继承来完成此需求

 

 继承分为︰单继承和多继承
使用如图语法,可以完成类的单继承。
继承表示:将从父类那里继承(复制)来成员变量和成员方法(不含私有)

演示

class Phone:
    id=345
    produce="huawei"
    __current_voltage=0.5#当前电压

class Phone2022(Phone):
    pass
phone=Phone2022()
print(phone.id)
print(phone.produce)
print(phone.__current_voltage)

 结果是

 如图,私有成员无法继承

pass关键字

这pass关键字就是用来去补全语法的,pass本身表示这里是空的,只是让我们的语法不产生错误

多继承

Python的类之间也支持多继承,即一个类,可以继承多个父类
演示

 演示

class Phone:
    id=345
    produce="huawei"
    def call_by_5g(self):
        print("5g通话")
class NFCReader:
    nfc_type="第五代"
    produce="HW"
    def read_card(self):
        print("读取NFC")

    def write_card(self):
        print("写入NFC")
class RemoteControl:
    rc_type="红外遥控"
    def control(self):
        print("红外遥控开启")
class myphone(Phone,NFCReader,RemoteControl):
    pass
phone=myphone()
phone.call_by_5g()
phone.read_card()
phone.write_card()
phone.control()

结果是

 多继承注意事项

多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级。即:先继承的保留,后继承的被覆盖

 小结

1.什么是继承?
继承就是一个类,继承另外一个类的成员变量和成员方法
语法:

 子类构建的类对象,可以

  • 有自己的成员变量和成员方法
  • 使用父类的成员变量和成员方法

2.单继承和多继承
单继承:一个类继承另一个类
多继承:一个类继承多个类,按照顺序从左向右依次继承
多继承中,如果父类有同名方法或属性,先继承的优先级高于后继承

3.pass关键字的作用是什么
pass是占位语句,用来保证函数(方法)或类定义的完整性,表示无内容,空的意思

三.复写和使用父类成员

子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。即:在子类中重新定义同名的属性或方法即可。

复写父类成员的语法

演示

class Phone:
    id=345
    produce="huawei"
    def call_by_5g(self):
        print("5g通话")
class myphone(Phone):
    produce = "hw"#复写父类的成员属性
    def call_by_5g(self):#复写父类成员方法
        print("4g通话")
phone=myphone()
print(phone.produce)
phone.call_by_5g()

结果是

 但是呢我父类的这个东西呢我还想要
那么就需要

调用父类同名成员

一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员
如果需要使用被复写的父类的成员,需要特殊的调用方式:

法一:
调用父类成员
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self)

法二:
使用super()调用父类成员
使用成员变量: super().成员变量
使用成员方法:super().成员方法()

演示

class Phone:
    id=345
    produce="huawei"
    def call_by_5g(self):
        print("5g通话")
class myphone(Phone):
    produce = "hw"#复写父类的成员属性
    
    def call_by_5g(self):#复写父类成员方法
        # 方法一
        print(f"父类的品牌是{Phone.produce}")
        Phone.call_by_5g(self)
        #方法二
        print(f"父类的品牌是{super().produce}")
        super().call_by_5g()
    
phone=myphone()
print(phone.produce)
phone.call_by_5g()

结果是

 小结

1.复写表示:
对父类的成员属性或成员方法进行重新定义
2.复写的语法:
在子类中重新实现同名成员方法或成员属性即可
3.在子类中,如何调用父类成员
方式1:
调用父类成员
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self)

方式2:
使用super()调用父类成员
使用成员变量: super().成员变量
使用成员方法: super().成员方法()

注意:只可以在子类内部调用父类的同名成员,子类的实体类对象调用默认是
调用子类复写的

 

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

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

相关文章

【机器学习】基于Pytorch和GoogleNet的海面舰船图像分类

文章目录基于Pytorch和GoogleNet的海面舰船图像分类1. 问题概述2. 实验环境、依赖库与代码结构3. GoogleNet网络架构3.1 Inception结构3.2 辅助分类器4. GoogleNet网络特征提取说明4.1 低层特征提取4.2 Inception特征提取4.3 分类器特征提取5. 具体参数设计6. 实际代码说明7. 网…

关于ElasticSearch新建文档的姿势

定义如下mapping,并且创建索引,索引包括四个字段 有三个分片 (number_of_shards),每个分片有一个副本分片(number_of_replicas) PUT books {"mappings": {"properties": {"book_id": {"type": &qu…

[SUCTF 2018]MultiSQL(预处理)

打开界面发现注册admin已经有了这个用户,就注册了一个admin 然后功能都看一下,发现有一个id的get传参,所以我们可以传参数,实验一下是不是sql注入点 id1的时候显示了admin的用户,想到了水平越权的问题。但还是没啥&am…

计数指针 std::shared_ptr

shared_ptr 共享指针 shared_ptr 计数指针称为共享指针&#xff0c;可以共享数据。shared_ptr 创建了一个计数器与类对象所指的内存相关联Copy 之后计数器加一&#xff0c;销毁之后计数器减一。计数器 API 接口为 &#xff1a;use_count() 测试代码&#xff1a; #include <…

Python + Django开发在线考试管理系统(附源码)

本文最终实现一个Web在线考试管理系统&#xff0c;可作为Python Web&#xff0c;Django的练手项目&#xff0c;也可以作为计算机毕业设计参考项目。 文章目录系统功能需求分析系统设计及实现思路源码分享&系统实现过程系统展示系统功能需求分析 在线考试管理系统&#xff…

机器学习中的数学原理——二分类问题

今天是2022年的最后一天&#xff0c;提前祝大家新年快乐&#xff01;这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟&#xff0c;也希望对你的学习有帮助哦&#xff01;感兴趣的小伙伴欢迎私信或者评论区留言&#xff01;这一篇就更新一下《白话机器学习中的数…

shell流程控制之条件判断练习

1、ping主机测试,查看主机是否存活&#xff1b; #!/bin/bash ######################### #File name:ping.sh #Version:v1.0 #Email:admintest.com #Created time:2022-12-28 05:06:21 #Description: ######################### var$( ifconfig ens33 | grep inet | grep -v…

【JavaSE成神之路】Java面向对象(下)

哈喽&#xff0c;我是兔哥呀&#xff0c;今天就让我们继续这个JavaSE成神之路&#xff01; 这一节啊&#xff0c;咱们要学习的内容还是Java的面向对象。 1. 构造方法 构造方法和new关键字是一对好拍档。 在之前GirlFriend的例子中&#xff0c;我们写了两个构造方法&#xff…

gl inet mt1300读写性能测试

为什么买这个路由器 1.最近需要一个路由器, 2.我需要在局域网存储一些东西方便手机电脑访问(微型nas), 3.另外还希望这个路由器是开源智能路由器(能装插件玩), 4.小,非常小,typec 供电(5v 1.5A),非常方便,支持tf卡 usb3.0 wifi 5GHz (1)不用nas的原因:我只是轻度使用nas,专…

Fedora 装系统后连接不上无线网络和蓝牙设备

Fedora 装系统后连接不上蓝牙鼠标0.升级系统&#xff0c;升级后仍然无法使用&#xff0c;执行步骤1-3的方法。1.查看本机是否有无线硬件模块——有2. 查看本机是否有蓝牙固件【驱动】——无3. 安装无线网络驱动3.1 打开终端3.2 安装dnf并配置3.3 使用dnf安装kmod-wl&#xff0c…

钉钉6亿用户的哲学:产业互联网的海洋里,没有人是一座孤岛

除了拥有大人口和大市场条件的中国&#xff0c;或许难有另一个国家再现数亿人共同投身产业互联网的场景。除了钉钉&#xff0c;或许也很难有别的软件能同时承载6亿人的数字化理想。 12月28日&#xff0c;钉钉总裁叶军在2022钉钉7.0产品发布会上&#xff0c;带来了钉钉的最新数…

知识变现海哥:如何将你的知识变成一套解决方案

知识变现海哥&#xff1a;如何将你的知识变成一套解决方案 之前我说过我们卖的不是自己能力&#xff0c;而是一套成体系的解决方案&#xff0c;因为没有人会单纯地为能力买单&#xff0c;我们越是能证明自己的能力有价值&#xff0c;就越能将自己的能力卖高价。而价值要怎么证…

Acwing---789.数的范围

数的范围1.题目2.基本思想3.代码实现4.总结1.题目 给定一个按照升序排列的长度为n的整数数组&#xff0c;以及 q 个查询。 对于每个查询&#xff0c;返回一个元素k的起始位置和终止位置&#xff08;位置从0开始计数&#xff09;。 如果数组中不存在该元素&#xff0c;则返回“…

使用递归和非递归方式实现二叉树先序、中序、后序遍历

题目&#xff1a; 用递归和非递归方式&#xff0c;分别按照二叉树先序、中序和后续打印所有的节点。先序为根左右&#xff0c;中序为左根右&#xff0c;后序为左右根。 递归方式&#xff1a; &#xff08;1&#xff09;先序&#xff1a; //先序 根左右public static void pr…

TypeScript入门

这两天终于抽空学习了typescript&#xff0c;把欠了四年的帐给补上了。 废话不多说&#xff0c;先上官网链接&#xff1a;TypeScript中文网 TypeScript——JavaScript的超集 一、下载安装&#xff1a;用npm > npm install -g typescript 验证是否安装成功&#xff1a; …

保存网页内容 自动过滤广告和网页头尾

网页可以非常方便的为我们展示各种信息&#xff0c;如果遇到重要的资料文献&#xff0c;希望在本地电脑上保存下来该怎么操作呢&#xff1f;把网址添加到收藏夹&#xff0c;下次直接打开网址查看&#xff0c;但如果资源被网站删除&#xff0c;就再也找不到了。还是保存在自己电…

msf联动cs

Cobalt Strike简称CS 用于团队作战使用&#xff0c;由一个服务端和多个客户端组成&#xff0c;能让多个攻击者这在一个团队服务器上共享目标资源和信息&#xff0c;我们在使用msf获得权限以后&#xff0c;可以将信息共享到cs上&#xff0c;使用cs来进行监听以及其他的操作。 1…

理解Kotlin泛型

文章目录Kotlin泛型声明处型变协变< out T>逆变< in T>使用处型变(类型投影)参考Kotlin泛型 声明处型变 协变< out T> interface GenericsP<T> {fun get(): T //读取并返回T&#xff0c;可以认为只能读取T的对象是生产者 }如上声明了GenericsP<…

【C++】STL —— 用哈希表同时封装出unordered_set和unordered_map

目录 一、底层结构 1. 哈希的概念 二、哈希冲突 三、哈希函数 四、解决哈希冲突 1. 闭散列&#xff08;开放定址法&#xff09; 1. 线性探测 2. 二次探测 2. 闭散列的实现 3. 开散列&#xff08;拉链法&#xff09; 4. 开散列和闭散列的比较 五、HashTable的…

树莓派内核编译

文章参考&#xff1a; 深海游弋的鱼 – 默默的点滴 (mobibrw.com) 深海游弋的鱼 – 默默的点滴 (mobibrw.com) 1. 安装 git sudo apt install git 2. 下载树莓派内核源码 git clone --depth1 -b rpi-4.9.y https://github.com/raspberrypi/linux.git rpi-linux 3. 安装…