python-面向对象

2023-11-08

一、什么是面向对象

1.什么是面向对象(概念)

根据模板(创建一个类)+ 实例化一个类 == 面向对象

2.面向对象的好处

  1. 可重复使用(实例化类)
  2. 容易修改(只用修改类的模板)

3.面向对象的特点

  1. 封装 
  2. 继承
  3. 多态

4.类名首字母必须大写

5.面向对象的案例

二、面向对象特点 封装、多态、继承 

1.什么是封装

将生活中的实物 创建一个类并实例化类 就叫封装 (概念)

创建类 + 实例化 = 封装

1.面向对象的私有方法

私有方法:定义一个函数 在函数名前面加上 __函数名

私有方法作用:只能在函数内使用

应用场景: 后面的案例会讲到

私有方法的使用:

self.__name()

2.面向对象的公有方法

公有方法:在任意地方 都可以被使用

3.如何区别公有方法和私有方法

看函数名前是否加了__ 。加了就是私有 没加就是公有

2.什么是继承

1.什么是继承?

从字面上来讲:儿子继承父亲的基因和财产 子承父业

在我们类中什么叫继承?:子类继承父类的成员属性 和 成员方法

如果说子类想继承父类 就把父类的名字写到子类函数名的括号中

继承:不管公有还是私有 都会被继承

# 写一个类 父类
# 汽车 1代汽车 2代汽车 3代汽车 4代汽车
class Demo():
    # 初始化
    def __init__(self, name, typename, money, color, ml):
        # 汽车的名字
        self.name = name
        # 汽车的类型
        self.typename = typename
        # 汽车的价格
        self.money = money
        # 汽车的颜色
        self.color = color
        # 汽车的发动机
        self.ml = ml

    # 私有方法 __ 算出汽车的一个最大马力 105 不要管 这个算术准不准 自己知道 别人 私有方法
    def __user(self):
        # 计算发动机最大马力
        return self.ml * 105

    # 公有方法
    def func(self):
        # 拿到最大的马力 并 赋值给a
        a = self.__user()
        print(f'汽车的最大马力{a},目前正在马路上狂奔')


# 图纸已经设计完了 只需要通过这个图纸批量造汽车
汽车 = Demo('一代奔驰', '轿车', 10000, '红色', 1.5)

汽车.func()


# 要对类进行一个功能添加的话 这个我们就可以使用继承

# 子类 如果说子类想继承父类 就把父类的名字写到子类函数名的括号中
class Demo2(Demo):
    # 原基础上添加一个新的功能
    def func2(self):
        print('升起尾翼飘逸')


# 实例化子类 一定也要把父类的参数带上 继承我们父类的属性和方法
第二代汽车 = Demo2('奔驰2代', '轿车', 10000, '白色', 2.0)

# 如果访问父类的属性和方法 我们父类的方法可以被字类调用
第二代汽车.func()
# 也可以使用 最新的功能
第二代汽车.func2()





3.什么是多态?

多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。

# 多态
# 父类
class A:
    # 定义了一个方法 公有方法
    def sound(self):
        print('我是父类a')


# 子类 在子类函数名中 加入父类的名字
class Cat(A):
    # 定义了一个方法 公有方法
    def sound(self):
        print('我是字类Cat, 喵喵喵')


# 子类 在子类函数名中 加入父类的名字
class Dog(A):
    # 定义了一个方法 公有方法
    def sound(self):
        print('我是子类Dog, 汪汪汪')


# 实例化三个类
A = A()
cat = Cat()
dog = Dog()


# 函数的名字admin
def admin(x):
    # x就是这个类 类中有一个方法叫sound
    x.sound()


admin(cat)
admin(dog)
admin(A)

实战案例(开发的应用场景)

模拟一个应用场景:

模拟银行账户:使用类来模拟银行账户,每个账户可以存款、取款、查询余额等操作

# 模拟银行账户:使用类来模拟银行账户,每个账户可以存款、取款、查询余额等操作
# 因为很多人都要来查询账户 余额 存款 取款
# 很多人 以面向对象的编程思路 来写这个案例
class Demo():
    # 初始化类
    def __init__(self, value, money):
        # 卡号
        self.value = value
        # 余额
        self.money = money

    # 存钱
    def func(self, data=0):
        # 拿到我们的余额 加上 我们要存的钱数
        self.money += data
        print('存钱成功')

    # 查询当前余额
    def func2(self):
        print(f'你当前的账户余额为:{self.money}')

    # 取钱 设置一个默认值 如果说没有传参 就不会报错
    def func3(self, data=0):
        # 如果说 当前账户余额 小于 你要取钱的金额 你就不能取
        if self.money < data:
            print('你当前账户余额不足')
        else:
            # 拿当前的余额 减去 取钱的金额data
            self.money -= data
            print('取款成功')


# 实例化一个类

张三 = Demo('123456', 100000)
# 查询余额
张三.func2()

李四 = Demo('123456', 100)
# 查询余额
李四.func2()
# 存款
李四.func(100)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python-面向对象 的相关文章

随机推荐

  • 西门子PLC的常见的通讯方式

    1 PPI通信 T PPI协议是S7 200cpu最基本的通信方式 S7 200cpu的默认通信方式可通过原端口通信 西门子PLC是一种专为工业环境应用而设计的数字操作电子系统 可编程存储器 存储逻辑操作 顺序控制 定时 计数 算术操作等指
  • Ubuntu常用命令汇集

    ubuntu常用命令汇集 文章目录 一 文件组织结构 二 常用命令 三 权限 一 文件组织结构 为根目录 为系统最基本的目录 home下有用户名的文件夹 该文件夹就是 为主目录 为日常使用的目录 命令在终端中输入 需要注意当前所在的文件夹
  • 神经网络学习小记录64——Pytorch 图像处理中注意力机制的解析与代码详解

    神经网络学习小记录64 Pytorch 图像处理中注意力机制的解析与代码详解 学习前言 什么是注意力机制 代码下载 注意力机制的实现方式 1 SENet的实现 2 CBAM的实现 3 ECA的实现 注意力机制的应用 学习前言 注意力机制是一
  • 第2课:Scratch介绍

    什么是Scratch Scratch 一款免费的图形化少儿编程工具 由麻省理工学院设计开发 它是完全免费的 它将一大片代码变成一个个功能模块 界面非常清晰 小朋友可以像搭积木一样做出自己的游戏程序 对于低年级的小朋友很容易上手 而且很容易培
  • 使用k8s业务在十几分钟无人使用时,访问报错问题

    业务放入k8s测试中发现当十几分钟没有访问 再次访问时就会报错 刷新后业务正常 一直访问故障不复现 通过整体测试发现Redis自动断开连接 redis在使用net网络模式时会出现自动断开问题 升级Redis版本后解决
  • 傅里叶变换,高通,低通滤波

    傅里叶变换 傅里叶变换的作用 高频 变化剧烈的灰度分量 例如边界 低频 变化缓慢的灰度变量 例如一片大海 滤波 低通滤波器只保留低频 会使头像模糊 高通滤波器只保留高频 会使图像细节增强 opencv主要就是cv2 dft 和cv2 idf
  • 机械臂机器人——使用Matlab Robotic ToolBox建立四轴机械臂模型并实现运动控制仿真

    文章目录 四轴机械臂实物 Robotic ToolBox机械臂建模 1 建立机械臂的D H表 建立机械臂坐标系 根据坐标系建立D H表 2 代码建模 机械臂运动学仿真 1 正运动学仿真 2 逆运动学仿真 为了能够实现机械臂的运动轨迹规划 同
  • Github Page 个人主页——自定义域名

    1 前言 看本文前请确认已部署好基础的静态网页 参考上篇文章 Github Page 个人主页 项目部署 部署好的个人网页若使用 username github io 访问 会让别人很难记住 这时就可以使用自定义域名来绑定仓库了 本文将介绍
  • Centos 安装 Kafka 后台启动 教程

    安装 官网 http kafka apache org downloads 1 下载 Python wget http mirrors tuna tsinghua edu cn apache kafka 0 11 0 0 kafka 2 1
  • html自动图片尺寸,关于html:CSS背景图像适合宽度,高度应按比例自动缩放

    我有 body background url images background svg 期望的效果是该背景图像的宽度等于页面的宽度 高度变化以保持比例 例如 如果原始图像恰好是100 200 任何单位 且正文宽度为600px 则背景图像最
  • 2021-11-02 B1026 简单的时间转换显示和将小数四舍五入

    B1026 简单的时间转换显示和将小数四舍五入 原题 1026 程序运行时间 15 分 要获得一个 C 语言程序的运行时间 常用的方法是调用头文件 time h 其中提供了 clock 函数 可以捕捉从程序开始运行到 clock 被调用时所
  • java没有报错,但编译失败。

    这段代码总是编译失败 但是idea没有报错 这东西是抽象类 解决办法 jdk版本问题 虽然都是1 8 换成了333就没问题了 个人经验 换成版本高的试试
  • C++: 'identifier': identifier not found [Compiler Error C3861]

    问题 模板类继承模板类时 子类无法直接访问父类成员 会报如下错误 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C3861 insertAsLast 找不到标识符 DSA D Code DSA DSA Queue h 8 环境 V
  • 解决Vscode中unresolved import “XXX” 问题

    正常导入同级目录的 py文件 报黄色警告 原因 在Vscode中 import后面跟着的 必须是全路径 将import后面的文件路径 修改成全路径 便不会有unresolved import XXX 警告
  • adele心理学

    人生中最大的谎言就是不活在此时此刻 纠结过去 关注未来把微弱而模糊的光打向人生整体 自认为看到了些什么 你之前就一直忽略 此时此刻 只关注根本不存在的过去和未来 对自己的人生和无可替代的刹那撒了一个大大的谎言 我们应该更加认真地过好 此时此
  • 华为OD机试 C++ 异常的打卡记录

    描述 我们的目标是查找出那些异常的员工打卡记录 异常的定义是 打卡所用的设备号与员工注册的设备号不匹配 同一个员工两次打卡的时间间隔小于60分钟 但距离超过5km 你会得到一个字符串数组 里面包含每条打卡记录 格式为 工号 时间 分钟 距离
  • gcc与g++的安装和使用

    首先大致介绍一下gcc和g 在此之前 你需要先安装gcc与g 然后才能进行指令操作 命令如下 sudo yum install y gcc c 在命令行输入以上指令后 gcc g 便成功安装了 gcc是一个专门用来编译链接c语言的编译器 g
  • @EnableAspectJAutoProxyAop注解实现

    转载 https www cnblogs com foreveravalon p 8653832 html 在这个注解比较流行的年代里 当我们想要使用spring 的某些功能时只需要加上一行代码就可以了 比如 EnableAspectJAu
  • Git学习:git 生成 patch的命令

    个人理解 patch就是打补丁 通过git工具把代码的差分 生成patch文件 然后通过git工具可以直接把patch文件的内容 merge到代码里面 生成patch的命令 git diff gt patch 本地变更 git diff 的
  • python-面向对象

    一 什么是面向对象 1 什么是面向对象 概念 根据模板 创建一个类 实例化一个类 面向对象 2 面向对象的好处 可重复使用 实例化类 容易修改 只用修改类的模板 3 面向对象的特点 封装 继承 多态 4 类名首字母必须大写 5 面向对象的案