python入门篇11-面向对象的基础使用

全文目录,一步到位

  • 1.前言简介
    • 1.1 专栏传送门
      • 1.1.1 上文小总结
      • 1.1.2 上文传送门
  • 2. python基础使用
    • 2.1 面向对象的基础使用
      • 2.1.1 创建类
      • 2.1.2 使用对象(定义`成员变量`)
      • 2.1.3 `成员方法`的定义与使用
      • 2.1.4 `构造方法`的使用
      • 2.1.5 常用魔术方法
    • 2.2 面向对象思想核心
      • 2.2.1 面向对象_私有成员
      • 2.2.2 复写
      • 2.2.3 继承
      • 2.2.4 多态
    • 2.3 python变量的类型注解
      • 2.3.1
      • 2.3.2
  • 3. 基础语法总结案例
    • 3.1 用面向对象思想 设计一个闹钟
      • 3.1.1 创建闹钟的实体类对象
      • 3.1.2 创建 赋值并使用闹钟功能
    • 3.2
      • 3.2.1
      • 3.2.2
  • 4. 文章的总结与预告
    • 4.1 本文总结
    • 4.2 下文预告


1.前言简介

1.1 专栏传送门

1.1.1 上文小总结

1.1.2 上文传送门

2. python基础使用

2.1 面向对象的基础使用

2.1.1 创建类

class关键字修饰

  • 类名首字母大写
  • 属性名 = None
class Student:username = Noneage = Nonegender = Nonephone = Noneemail = None

2.1.2 使用对象(定义成员变量)

student = Student()即可 java是new对象初始化
属性赋值是 对象.属性 =

# 2. 创建一个对象
student = Student()# 3. 对象属性进行赋值
student.username = "张三"
student.age = "20"
student.gender = "男"
student.phone = "13345678910"
student.email = "123456@qq.com"print(student.username)
print(student.age)
print(student.gender)
print(student.phone)
print(student.email)

2.1.3 成员方法的定义与使用

关键字 def , 默认生成一个self关键字 跟this一样 指代当前对象

class Student:id = Noneusername = Noneage = Nonegender = Nonephone = Noneemail = Nonedef introduce_myself(self):"""自我介绍:return:"""print(f"你好,我是{self.username},年龄{self.age},性别是{self.gender},手机号是:{self.phone},邮箱是:{self.email}")def introduce_hobby(self, msg):"""爱好介绍:return:"""print(f"你好,我是{self.username},我的爱好是:{msg}")

案例使用: 创建对象 赋值并使用成员方法

# 使用对象
student = Student()# 3. 对象属性进行赋值
student.id = 1
student.username = "张三"
student.age = "20"
student.gender = "男"
student.phone = "13345678910"
student.email = "123456@qq.com"student1 = Student()
student1.id = 2
student1.username = "李四"
student1.age = "25"
student1.gender = "女"
student1.phone = "13345678911"
student1.email = "145689@qq.com"student.introduce_myself()
student1.introduce_hobby("唱跳rap,篮球")

2.1.4 构造方法的使用

注意看 2.1.1 与这个写法区别 可以不写成员属性, 直接在构造方法中写
java不可以的呦~~

class Student:# id = None# username = None# age = None# gender = None# phone = None# email = Nonedef __init__(self, id, username, age, gender, phone, email):self.id = idself.username = usernameself.age = ageself.gender = genderself.phone = phoneself.email = emailprint("构造方法执行成功")

案例使用测试

for i in range(10):username = input("请输入用户名: \n")age = input("请输入年龄: \n")sex = input("请输入性别: \n")phone = input("请输入电话号: \n")email = input("请输入邮箱: \n")student = Student(i, username, age, sex, phone, email)print(f"第{i + 1}名学生录入成功", "")print(f"你好,我是{student.username},年龄{student.age},性别是{student.gender},手机号是:{student.phone},邮箱是:{student.email}")

2.1.5 常用魔术方法

__init__: 构造方法
__str__: 不加这个就是内存地址 加了str的魔术方法 返回的就是return信息
__lt__: (>,=,<) 任意类型比较
__le__: >=,<=
__eq__: ==
还有很多, 如图:
在这里插入图片描述

class Student:def __init__(self, id, username, age):self.id = idself.username = usernameself.age = agedef __str__(self):"""不加这个就是内存地址 加了str的魔术方法 返回的就是return信息:return:"""return f"student对象,id是:{self.id}name:{self.username}"def __lt__(self, other):"""任意选择一个属性进行类对象进行对比(>,=,<)  不写这个比较会报错的:param other::return:"""return self.age < other.agedef __le__(self, other):""">=,<=:param other::return:"""return self.age <= other.agedef __eq__(self, other):"""不写比较的是地址:param other::return:"""return self.age == other.age

案例使用测试

# 区别对比
# 不加__str__()方法 <__main__.Student object at 0x0000021E508FFFD0>
# 加__str__()方法 student对象,id是:1name:张三
stu = Student(1, "张三", 20)
print(stu)
print(str(stu))# __lt__()
stu1 = Student(2, "李四", 25)
print(stu > stu1)  # False# le
stu2 = Student(3, "王五", 25)
print(stu1 <= stu2)  # True# eq
print(stu1 == stu2)  # True

2.2 面向对象思想核心

java/python都是 封装继承 多态三大基本特性
有的会说四大特性: 抽象 abstract

2.2.1 面向对象_私有成员

java的private
__修饰
私有属性和方法
建立成员方法对外暴露
对象使用可使用成员方法

  • 定义一个类 内含私有成员变量和私有成员方法
class Phone:__current_voltage = 0  # 当前手机的运行电压def __keep_single_core(self):print("进入超级省电模式")def call_by_5g(self):if self.__current_voltage >= 1:print("功能正常使用!")else:self.__keep_single_core()print("电量过低, 不可使用此功能")

案例使用测试
phone = Phone()
phone.call_by_5g() 运行正常
ps: 特别注意:
直接使用private方法, 会报错
phone.__keep_single_core()
报错信息: # AttributeError: ‘Phone’ object has no attribute ‘__keep_single_core’. Did you mean: ‘_Phone__keep_single_core’ ?

2.2.2 复写

父类成员属性的重新赋值 叫属性复写
父类成员方法的重新定义 叫方法复写

class BasePhone:IMEI = None  # 序列号producer = 'ANDROD'  # 品牌def call_by_4g(self):print("手机4g基础功能开启!")class UpPhone(BasePhone):IMEI = "aaabbbccc123456"  # 序列号face_id = "123456"producer = 'UPONE'  # 品牌def call_by_4g(self):print("手机4g暂停维护!")def call_by_5g(self):print("手机开启5g功能, 对应功耗增加")

2.2.3 继承

配合2.1.2使用
java是单继承(extend)多实现(implement)
python既可以单继承 也可以 多继承

  • 关键字pass 没有特殊意义 占位(防止语法错误)
  • 直接看代码吧
class BasePhone:IMEI = None  # 序列号producer = 'ANDROD'  # 品牌def call_by_4g(self):print("手机4g基础功能开启!")class UpPhone(BasePhone):face_id = "123456"producer = 'UPONE'  # 品牌def call_by_4g(self):print(f"{self.producer}手机4g暂停维护!")def call_by_5g(self):print(f"手机基础系统:{super().producer}")super().call_by_4g()print("手机开启5g功能, 对应功耗增加")class NFCReader:nfc_type = "门禁"def open_by_nfc(self):print(f"nfc功能启动, 类型:{self.nfc_type}")class RemoteControl:rc_type = "红外遥控"def start_rc_control(self):print("开启红外遥控")class MyPhone(UpPhone, NFCReader, RemoteControl):IMEI = "123456"def call_by_4g(self):UpPhone.call_by_5g(self)print(f"UpPhone的4g最新公告来袭~~~")print(f"{UpPhone.producer}手机通信重新升级, 4g+模式, 快人一步")pass  # 补全功能 不报语法错误

案例使用测试

  • 测试继承和复写
phone = MyPhone()
print(phone.producer)
print(phone.IMEI)
phone.call_by_4g()
phone.call_by_5g()
phone.open_by_nfc()
phone.start_rc_control()
  • 复写并要查找父类功能
    phone = MyPhone()
    phone.call_by_4g()

2.2.4 多态

多态解释:

  • 同一个行为可以有多个不同表现形式的能力

抽象类: 含有抽象方法的类
抽象方法: 方法体是空实现的(pass) 称之为抽象方法
抽象类建成后 里面装满要求
子类继承后根据要求自己完善功能
传入不同对象执行不同结果

[理解: 跟一个使用规范差不多, 必须实现的功能说明, 具体怎么实现不管, 类似甲方]
# 同一行为 不同对象使用 获得不同装填  学校都有这些行为
class AbstractSchool01:def class_begin(self):print("-> 上课 <-")passdef class_over(self):print("-> 下课 <-")passdef after_school(self):print("-> 放学 <-")# A学校复写功能
class ASchool(AbstractSchool01):def class_begin(self):print("-> A学校-上课 <-")passdef class_over(self):print("-> A学校-下课 <-")passdef after_school(self):print("-> A学校-放学 <-")# B学校复写功能
class BSchool(AbstractSchool01):def class_begin(self):print("-> B学校-上课 <-")passdef class_over(self):print("-> B学校-下课 <-")passdef after_school(self):print("-> B学校-放学 <-")def choose_school(school: AbstractSchool01):school.class_begin()school.class_over()school.after_school()
choose_school(ASchool())
choose_school(BSchool())

2.3 python变量的类型注解

2.3.1


2.3.2

3. 基础语法总结案例

3.1 用面向对象思想 设计一个闹钟

包含价格, 主键id和功能

3.1.1 创建闹钟的实体类对象

一般与数据库字段对应

class Clock:id = Noneprice = Nonedef ring(self):import winsoundwinsound.Beep(366, 500)winsound.Beep(500, 150)winsound.Beep(800, 100)winsound.Beep(400, 160)winsound.Beep(600, 100)winsound.Beep(600, 100)winsound.Beep(400, 160)winsound.Beep(700, 150)winsound.Beep(200, 100)winsound.Beep(366, 500)

3.1.2 创建 赋值并使用闹钟功能

clock = Clock()
clock.id = 1
clock.price = 20
print(f"闹钟id:{clock.id}, 价格是:{clock.price}, 响~~~")
clock.ring()clock1 = Clock()
clock1.id = 1
clock1.price = 20
print(f"闹钟id:{clock.id}, 价格是:{clock.price}, 响~~~")
clock1.ring()

3.2

3.2.1

3.2.2

4. 文章的总结与预告

4.1 本文总结

4.2 下文预告



作者pingzhuyan 感谢观看

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

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

相关文章

PS | 15个快捷键演示

01 前言 工具&#xff1a;Adobe Photoshop 2021 安装&#xff1a;无 网上自查 02 快捷键表 Ctrl T自由变换[减小画笔大小]增加画笔大小Shift [降低画笔硬度Shift ]增加笔刷硬度D默认前景/背景颜色X切换前景/背景颜色Ctrl J通过复制新建图层Ctrl Shift J通过剪切新建图层Esc取…

使用 WPF + Chrome 内核实现高稳定性的在线客服系统复合应用程序

对于在线客服与营销系统&#xff0c;客服端指的是后台提供服务的客服或营销人员&#xff0c;他们使用客服程序在后台观察网站的被访情况&#xff0c;开展营销活动或提供客户服务。在本篇文章中&#xff0c;我将详细介绍如何通过 WPF Chrome 内核的方式实现复合客服端应用程序。…

位运算总结(Java)

目录 位运算概述 位运算符 位运算的优先级 位运算常见应用 1. 给定一个数n&#xff0c;判断其二进制表示中的第x位是0还是1 2. 将数n的二进制表示中的第x位修改为1 3. 将数n的二进制表示中的第x位修改为0 4. 位图 例题&#xff1a;判断字符是否唯一 5. 提取数n的二进制…

《区块链公链数据分析简易速速上手小册》第5章:高级数据分析技术(2024 最新版)

文章目录 5.1 跨链交易分析5.1.1 基础知识5.1.2 重点案例&#xff1a;分析以太坊到 BSC 的跨链交易理论步骤和工具准备Python 代码示例构思步骤1: 设置环境和获取合约信息步骤2: 分析以太坊上的锁定交易步骤3: 跟踪BSC上的铸币交易 结论 5.1.3 拓展案例 1&#xff1a;使用 Pyth…

OCP的operator——(2)OLM

文章目录 了解OperatorOperator Lifecycle Manager&#xff08;OLM&#xff09;OLM概念和资源OLM是什么OLM资源Cluster service version&#xff08;CSV&#xff09;Catalog source定制catalog source的image模板目录健康需求 SubscriptionInstall planOperator groupOperator …

文件压缩炸弹,想到有点后怕

今天了解到一个概念&#xff0c;压缩炸弹。 参考&#xff1a; https://juejin.cn/post/7289667869557178404 https://www.zhihu.com/zvideo/1329374649210302464 什么是压缩炸弹 压缩炸弹&#xff08;也称为压缩文件炸弹、炸弹文件&#xff09;是一种特殊的文件&#xff0c;它…

面试:大数据和深度学习之间的关系是什么?

大数据与深度学习之间存在着紧密的相互关系&#xff0c;它们在当今技术发展中相辅相成。 大数据的定义与特点:大数据指的是规模(数据量)、多样性(数据类型)和速度(数据生成及处理速度)都超出了传统数据处理软件和硬件能力范围的数据集。它具有四个主要特点&#xff0c;通常被称…

【Java】零基础蓝桥杯算法学习——二分查找

算法模板一: // 数组arr的区间[0,left-1]满足arr[i]<k,[left,n-1]满足arr[i]>k;Scanner scan new Scanner(System.in);int[] arr {1,2,3,4,5};int left 0,right arr.length-1;int k scan.nextInt();while(left<right) {//leftright时退出循环int mid (leftrigh…

leetcode(双指针)11.盛最多水的容器(C++详细解释)DAY9

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回…

【Django】Django项目部署

项目部署 1 基本概念 项目部署是指在软件开发完毕后&#xff0c;将开发机器上运行的软件实际安装到服务器上进行长期运行。 在安装机器上安装和配置同版本的环境[python&#xff0c;数据库等] django项目迁移 scp /home/euansu/Code/Python/website euansuxx.xx.xx.xx:/home…

OpenCV基础:用Python生成一幅随机的噪声图像

使用Python&#xff1a;生成一幅随机数值的灰度图像&#xff0c;图像大小为1616像素。借助OpenCV库。输出数值&#xff0c;并显示图像。 # -*- coding: utf-8 -*- """ Created on Wed Feb 14 21:49:09 2024author: 李立宗公众号&#xff1a;计算机视觉之光知识…

【QT+QGIS跨平台编译】之四十:【gsl+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、GSL介绍二、GSL下载三、文件分析四、pro文件五、编译实践一、GSL介绍 GSL(GNU Scientific Library)是一个开源的数值计算库,用于提供一系列常用的数学函数和算法。它为科学计算和数据分析提供了高效、可靠的工具。 GSL库提供了丰富的功能,包括数值积分、数值…

C++-带你深度理解string类的常见接口

1. 为什么学习string类&#xff1f; C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&#xff0c;而且底层空间需…

“从根到叶:深入理解堆数据结构“

​​​​​​​ 一.堆的概念及实现 1.1堆的概念 在数据结构中&#xff0c;堆是一种特殊的树形数据结构。堆可以分为最大堆和最小堆两种类型。 最大堆&#xff1a;对于堆中的任意节点&#xff0c;其父节点的值都不小于它的值。换句话说&#xff0c;最大堆中的根节点是堆中的最…

AI论文速读 | 2024【综述】图神经网络在智能交通系统中的应用

论文标题&#xff1a;A Survey on Graph Neural Networks in Intelligent Transportation Systems 链接&#xff1a;https://arxiv.org/abs/2401.00713 作者&#xff1a;Hourun Li, Yusheng Zhao, Zhengyang Mao, Yifang Qin, Zhiping Xiao, Jiaqi Feng, Yiyang Gu, Wei Ju, …

PR:熟悉PR工作环境

新建项目 设置自己的页面布局 首选项

【Algorithms 4】算法(第4版)学习笔记 07 - 2.4 优先队列

文章目录 前言参考目录学习笔记1&#xff1a;API1.1&#xff1a;实现 demo 示例1.2&#xff1a;初级实现&#xff08;有序或无序的数组&#xff09;2&#xff1a;二叉堆2.1&#xff1a;完全二叉树2.2&#xff1a;二叉堆2.2.1&#xff1a;堆的表示2.2.2&#xff1a;属性2.3&…

Java 基于 SpringBoot+Vue 的智慧外贸平台的研究与实现,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【Vue】Vue基础入门

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Vue ⛺️稳重求进&#xff0c;晒太阳 Vue概念 是一个用于构建用户界面的渐进式框架优点&#xff1a;大大提高开发效率缺点&#xff1a;需要理解记忆规则 创建Vue实例 步骤&#xff1a; …

Arm发布新的人工智能Cortex-M处理器

Arm发布了一款新的Cortex-M处理器&#xff0c;旨在为资源受限的物联网&#xff08;IoT&#xff09;设备提供先进的人工智能功能。这款新的Cortex-M52声称是最小的、面积和成本效率最高的处理器&#xff0c;采用了Arm Helium技术&#xff0c;使开发者能够在单一工具链上使用简化…