003集Class类应用实例—python基础入门实例

news2024/12/24 21:55:58

 

面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。

  类就是一个模板,模板里可以包含多个函数,函数里实现一些功能

  对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

 示例1,代码如下

# Myfun类,但是这个类只有一个函数f()
class Myfun:  # class 后必须跟冒号:,下一行必须空4格
    i = 12345
    def f(self):  # 类方法必须包含参数self, 且为第一个参数,self代表的是类的实例,后加:
        return 'hello world'  # return必须再空四格然后写代码,或同时按键ctrl+alt+L
x = Myfun()
# 访问类的属性和方法
print(x.i)  # 类x + 物品名i
print(x.f())  # 类x + 人名f

 运行结果如下:

F:\software\pythonProject\venv\Scripts\python.exe F:\software\pythonProject\0104.py 
12345
hello world

进程已结束,退出代码为 0

类的构造方法__init__()
假如init()也是人,但是他是家族和外界联络员,当外界的人想调用自己家族的人,就必须要先告诉他,所以只要家族的人被调用,那么init()就会被先执行,然后由他去告诉那个被调用的人,执行被调用的。

示例2:

class Complex:
    def __init__(self, aa, bb):  # 必须要有一个self参数
        self.a = aa  # 空格有严格限制,否则报错
        self.b = bb
x = Complex(3.0, 4.5)  # 输出结果:3. -4.5
print(x.a, x.b)

输出结果:3.0 4.5

示例3:

class People:
    name = ''
    age = 0
    # 定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0

    def __str__(self):
        return self.__weight

    # 定义构造方法
    def __init__(self, n, a, w):  # self为实例化本身,类似于js的this
        self.name = n
        self.age = a
        self.__weight = w

    def speak(self):
        print("%s 说:我 %d 岁。" % (self.name, self.age))

        '''
        ("%s 说:我 %d 岁。")此时的%s和%d均为参数,行参,需要在后面给他加上实参,需要加%
        比如("%a 前面为要传入的参数,后面这个是传入的实参"%(self.name ###此时就是实参))
        '''


# 实例化
p = People('cassie', 10, 3)
p.speak()

结果为:cassie 说:我 10 岁。

 

示例4:

class People:
    name = ''
    age = 18
    sex = 'f'

    def __str__(self):  # 把名字直接展示出来,在直接print实例化对象时
        return self.name

    def __init__(self, name):  # 接收参数
        self.name = name  # 修改上面的name属性的值

    # print('this is start')

    def like_apple(self):  # 需要调用此函数
        if self.sex == 'f':
            print('女性爱吃苹果')
        elif self.sex == 'n':
            print('男性不爱吃苹果')
        else:
            print('没有性别,无法判断')
        print(self.name, self.age,'岁')


a = People('lucy')  # 实例化
a.like_apple()  # 调用自己写的函数
'''
输出结果为:
女性爱吃苹果
lucy 0
'''
print(a)   #因为上面写了__str__这个方法,所以在print时,直接返回了名字

 结果为:女性爱吃苹果
lucy 18 岁
lucy

在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数self, 且为第一个参数,self代表的是类的实例。

self:类的方法与普通的函数只有一个特别的区别——必须有一个额外的第一个参数名称, 按照惯例它的名称是self。
类的实例:是将类应用在实例场景之中,比如有个类里的函数是f,假如这个f具有print某一时刻的天气状况的能力,那么如果我需要这个f来print一下今天12点的天气,那么让他打印今天12点的天气这个动作,就是类的实例化,让类中的函数具有的能力变成真实的动作。

面向对象的三大特性是指:封装、继承和多态。

一、封装

封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。

所以,在使用面向对象的封装特性时,需要:

将内容封装到某处

从某处调用被封装的内容

二、继承

  • 继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。

    例如:

      猫可以:喵喵叫、吃、喝、拉、撒

      狗可以:汪汪叫、吃、喝、拉、撒

  • 如果我们要分别为猫和狗创建一个类,那么就需要为 猫 和 狗 实现他们所有的功能,如下所示:

    上述代码不难看出,吃、喝、拉、撒是猫和狗都具有的功能,而我们却分别的猫和狗的类中编写了两次。如果使用 继承 的思想,如下实现:

      动物:吃、喝、拉、撒

         猫:喵喵叫(猫继承动物的功能)

         狗:汪汪叫(狗继承动物的功能)

  • 三、多态 

     Pyhon不支持Java和C#这一类强类型语言中多态的写法,但是原生多态,其Python崇尚“鸭子类型”。

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

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

相关文章

Uncaught (in promise) ReferenceError: require is not defined

在 Vue3 中加载项目路径下的资源图片,起初按照之前 vue 的写法 require 但浏览器却抛出了异常 Uncaught (in promise) ReferenceError: require is not defined 因为 require 采用的 webpack 加载方式,而 vue3 中通过 vite 的方式,两者存在差异,所以才产生了刚开始的一目; vu…

无线信号强度测试板/射频产品量产测试神器

目录 一、测试板特点 二、应用场景 三、芯片特点 四、测试板接口图 …

linux查找文件中的指定字符,并批量替换文件中指定字符

1、grep -rl “jquery-1.8.0.min.js” /opt 查找/opt 目录下存在jquery-1.8.0.min.js的文件 [rootlocalhost file1]# grep -rl "jquery-1.8.0.min.js" /opt /opt/file1/index.xhtml /opt/file2/index.xhtml /opt/shell.sh扩展:使用该命令可以查找文件中…

多链混沌:Layer2 格局演变与跨链流动性的新探索

点击查看原文:多链混沌:Layer2 格局演变与跨链流动性的新探索 如今的 Crypto 是一个由多链构成的混沌世界。曾经,以太坊聚集了加密世界绝大多数的流动性与 DeFi 应用,但现在其 TVL 占比已经降到 60% 以下,并仍处于下降…

Unity文字转语音(使用RT-Voice PRO [2023.1.0])

参考文章Unity插件——文字转朗读语音RtVioce插件功能/用法/下载_rtvoice-CSDN博客 一、使用步骤 1.导入进Unity(插件形式为 .unitypackage) https://download.csdn.net/download/luckydog1120446388/88717512 2.添加所需Prefab 1).右键可…

众和策略:四部门联合印发!这一板块大爆发!

沪指盘中一度重回2900点,游览工业链股票再度大涨 今天上午A股商场整体表现依旧相对低迷,首要指数有不同程度上涨,但涨幅遍及较小,上证指数盘中一度重回2900点整数关口之上,后又跌回2900点关口之下,到上午收…

Qt QWidget窗口基类

文章目录 1 QWidget介绍2 如何显示 QWidget窗口2.1 新建基于QWidget的窗口类2.2 再添加一个QWidget窗口类2.3 显示新添加的 QWidget窗口 3 常用的属性和方法3.1 窗口位置3.2 窗口大小3.3 窗口标题3.4 窗口图标3.5 资源文件 4 实例 1 QWidget介绍 Qt 中的常用控件,比…

设计模式的艺术P1基础—2.2 类与类的UML图示

设计模式的艺术P1基础—2.2 类与类的UML图示 在UML 2.0的13种图形中,类图是使用频率最高的两种UML图之一(另一种是用于需求建模的用例图),它用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解…

Mac重置NVRAM

Mac重置NVRAM Mac重置NVRAM如何重置 NVRAM搭载 Apple 芯片的 Mac基于 Intel 的 Mac Mac重置NVRAM NVRAM(非易失性随机访问存储器)是一小部分内存,Mac 使用这些内存来储存某些设置并对其进行快速访问。PRAM(参数 RAM)储…

二叉树的层序遍历经典问题(算法村第六关白银挑战)

基本的层序遍历与变换 二叉树的层序遍历 102. 二叉树的层序遍历 - 力扣(LeetCode) 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入…

kubernetes 审计与日志 详解

开头语 写在前面:如有问题,以你为准, 目前24年应届生,各位大佬轻喷,部分资料与图片来自网络 内容较长,页面右上角目录方便跳转 基本 介绍 在Kubernetes集群中,API Server的审计日志记录了…

golang实现加密解密文档

golang实现加密解密文档 package mainimport ("bytes""crypto/aes""crypto/cipher""crypto/rand""encoding/base64""flag""fmt""io""io/ioutil" )func main() {encodePtr : flag.…

过去半年信竞基础学习总结

当Richard同学从去年7月份,开始从YY班学习C和信息学竞赛时,他对C还一无所知,但对计算机和编程的兴趣让他一直都乐在其中。在过去的半年中,通过参加各个平台的月赛,让他更加热爱编程,也让Richard更加了解自己…

linux项目部署(jdk,tomcat,mysql,nginx,redis)

打开虚拟机,与连接工具连接好,创建一个文件夹 cd /tools 把jdk,tomcat安装包放入这个文件夹里面 #解压 tar -zxvf apache-tomcat-8.5.20.tar.gz #解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 编辑jdk文件以及测试jdk安装 第一行代码路径记得改成我…

服务器里面打开浏览器访问不了会是什么原因

我们在日常使用服务器的过程中,时常会有遇到各类情况,近日就有遇到用户联系到德迅云安全,反馈自己在服务器里面打不开浏览器,服务器里面没有网络无法访问的情况。那我们今天就来讲下服务器里面打不开网站可能是由哪些原因导致。 …

可充电助听器有哪些优势?

可充电助听器有哪些优势 01 无需频繁更换电池,对于手指不灵活、眼神不好的老年用户以及无法自行更换电池的儿童用户,使用更为方便。 02 可充电助听器的电池一般密封在助听器内部,机身的防水防尘性能更强。 03 部分充电盒具有快充、储电、…

GC5958Q—三相无刷直流电机速度控制芯片,应用在静音风扇马达上,可替代APX9358/茂达

GC5958Q提供无传感器三相无刷直流电机速度控制的所有电路。正弦波驱动器的方法将是更好的低噪声。该控制器的功能包括启动电路,反电动势换向控制,脉冲宽度调制(PWM)速度控制,锁定保护,和热关断电路。该GC5958Q是适用于游戏机和CPU…

一夜爆火,3天60亿,这泼天的富贵也轮到我们尔滨了

近日,哈尔滨这座北国之城突然成为全国瞩目的焦点,一夜之间,冰雪大世界、索菲亚大教堂、中央大街等老牌旅游景点在网络短视频和游客们的热切关注下,成为了这个冬季的新“顶流”。当地市民姚先生和胡先生异口同声表示:“…

服务发现Discovery

对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息 1、 修改cloud-provider-payment8001的controller import com.my.springcloud.utils.RestResponse; import com.my.springcloud.entities.Payment; import com.my.springcloud.service.PaymentSe…

关于外连接、内连接和子查询的使用(2)

目录 一. 前言 二. 使用外连接、内连接和子查询进行解答 三. 思维导图 一. 前言 在前面我们对外连接、内连接和子查询的使用有了一些了解,今天我们将继续更深入的进行学习。(这里缺少的八个题目在博主的前面博客有解答,大家可以移步前面一…