Python学习笔记--面向对象

news2024/12/23 5:51:51

未完待续。。。。。

(一)面向对象的基本概念

        我们之前学习的编程方式就是面向过程

        面相过程和面相对象,是两种不同的编程方式

        对比面向过程的特点,可以更好地了解什么是面向对象

1.1过程和函数

        过程是早期的一个编程概念

        过程类似于函数,只能执行,但是没有返回值

        函数不仅能执行,还可以返回结果

 1.2面相过程和面相对象基本概念

1)面相过程——怎么做?

        1.把完成某一个需求的所有步骤从头到尾逐步实现

        ⒉.根据开发需求,将某些功能独立的代码封装成一个又一个函数

        3.最后完成的代码,就是顺序地调用不同的函数

特点

        1.注重步骤与过程,不注重职责分工

        2.如果需求复杂,代码会变得很复杂

        3.开发复杂项目,没有固定的套路,开发难度很大!

 

 

 

# 1.设计一个类(类比生活中:设计一张登记表)
class Student:
    name=None  # 记录学生姓名
    gender=None # 记录学生性别
    nationality=None # 记录学生国籍
    native_place=None # 记录学生籍贯
    age=None # 记录学生年龄
# 2.创建一个对象(类比生活中:打印一张登记表)
stu_1=Student()
# 3.对象属性进行赋值(类比生活中:填写表单)
stu_1.name = "林军杰"
stu_1.gender = "男"
stu_1.nationality = "中国"
stu_1.native_place = "山东省"
stu_1.age = 31
# 4.获取对象中记录的信息
print(stu_1.name )
print(stu_1.gender)
print(stu_1.nationality)
print(stu_1.native_place)
print(stu_1.age)

 

 

 (二)类的成员方法

1.类的定义和使用

在上一节中,我们简单了解到可以使用类去封装属性,并基于类创建出一一个个的对象来使用。
现在我们来看看类的使用语法:

class 类名称:
	类的属性
	类的行为

●class是关键字, 表示要定义类了
●类的属性,即定义在类中的变量(成员变量)
● 类的行为, 即定义在类中的函数(成员方法)
创建类对象的语法对象=类名称()

 

类内部的函数叫(成员)方法,不叫函数。

成员方法的定义语法

 

# 定义一个带有成员方法的类
class Student:
    name= None
    def say_hi(self):
        print(f"大家好啊,我是{self.name},欢迎大家多多关照")

        stu1 = Student()
        stu1.name="王五"
        stu1.say_hi()
# 定义一个带有成员方法的类
class Student:
    name= None
    # def say_hi(self):
    #     print(f"大家好啊,我是{self.name},欢迎大家多多关照")
    def say_hi(self,msg):
        print(f"大家好啊,我是{self.name},{msg}")

        stu1 = Student()
        stu1.name="王五"
        stu1.say_hi("哎哟不错哟")

(三)类和对象

基于类创建对象的语法:对象名=类名称()
为什么非要创建对象才能使用呢?
类只是一种程序内的“设计图纸”,需要基于图纸生产实体(对象),才能正常工作,面向对象编程!!!! 

设计类——就是让类干活! 

下面代码有声音欧 耳机党小心!!!!! 

if __name__ == '__main__':
    # 设计一个闹钟类
    class Clock:
        id = None # 序列化
        price = None  # 价格

        def ring(self):
            import winsound
            winsound.Beep(2000,3000)


    # 构建2个闹钟对象并让其工作
    clock1 = Clock()
    clock1.id = "003032"
    clock1.price = 19.99
    print(f"闹钟ID: {clock1.id}, 价格: {clock1.price}")
    clock1.ring()
    #######################################
    clock2 = Clock()
    clock2.id = "003033"
    clock2.price = 21.99
    print(f"闹钟ID: {clock2.id}, 价格: {clock2.price}")
    clock2.ring()

 (四)构造方法

 

之所以可以省略是因为方法中,self.属性名=属性名起到了给成员变量声明且赋值,写了的话那就只是赋值 

"""
演示类的构造方法
"""
# 演示使用构造方法对成员变量进行赋值
# 构造方法的名称__init__
if __name__ == '__main__':
    class Student:
        def __init__(self, name,age, tel):
            self.name = name
            self.age = age
            self.tel = tel
            print("Student类创建了一个类对象")
    stu = Student("周杰轮",31, "18500006666")
    print(stu.name)
    print(stu.tel)
    print(stu.age)

 

 (五)魔术方法

 __ str __

if __name__ == '__main__':
    class Student:
        def __init__(self, name, age):
            self.name = name# 学生姓名
            self.age = age# 学生年龄
        # __ str__魔术方法
        def __str__(self):
            return f"Student类对象,name:{self.name}, age:{self.age}"
    stu = Student("周杰轮",31)
    print(stu)
    print(str(stu))

  __ lt __小于比较符号方法

if __name__ == '__main__':
    class Student:
        def __init__(self, name, age):
            self.name = name# 学生姓名
            self.age = age# 学生年龄
        # __ str__魔术方法
        def __str__(self):
            return f"Student类对象,name:{self.name}, age:{self.age}"

        #__lt__魔术方法.
        def __lt__(self,other):
            return self.age < other.age

    stu1 = Student("周杰轮",31)
    stu2 = Student("周轮", 3)
    print(stu1<stu2)
    print(stu1>stu2)

 _le_小于等于比较符号方法

if __name__ == '__main__':
    class Student:
        def __init__(self, name, age):
            self.name = name# 学生姓名
            self.age = age# 学生年龄
        # __ str__魔术方法
        def __str__(self):
            return f"Student类对象,name:{self.name}, age:{self.age}"

        #__lt__魔术方法.
        def __lt__(self,other):
            return self.age < other.age
        #__le__魔术方法.
        def __le__(self,one):
            return self.age<=one.age

    stu1 = Student("周杰轮",31)
    stu2 = Student("周轮", 35)
    print(stu1<=stu2)
    print(stu1>=stu2)

_eq_,比较运算符实现方法 

if __name__ == '__main__':
    class Student:
        def __init__(self, name, age):
            self.name = name# 学生姓名
            self.age = age# 学生年龄
        # __ str__魔术方法
        def __str__(self):
            return f"Student类对象,name:{self.name}, age:{self.age}"

        #__lt__魔术方法.
        def __lt__(self,other):
            return self.age < other.age
        #__le__魔术方法.
        def __le__(self,one):
            return self.age<=one.age
        #__eq__魔术方法.
        def __eq__(self, other):
            return self.age == other.age
    stu1 = Student("周杰轮",31)
    stu2 = Student("周轮", 31)
    print(stu1==stu2)

 

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

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

相关文章

4.3 分段低次插值

学习目标&#xff1a; 如果我要学习分段低次插值&#xff0c;我可能会采取以下几个步骤&#xff1a; 学习插值的基本概念和方法 在学习分段低次插值之前&#xff0c;我需要先掌握插值的基本概念和方法&#xff0c;例如拉格朗日插值、牛顿插值和内维尔方法等。这些基础知识可…

C#调用C++封装的SDK库(dll动态库)——上

C#调用C封装的SDK库(dll动态库)——上 一、C封装库 通过前几篇文章&#xff0c;我们封装了C的动态DLL库&#xff0c;有Qt版的&#xff0c;有C版的&#xff0c;当然还有介绍了Pimpl模式在SDK封装中的使用&#xff1a; Qt创建SDK VS创建SDK Pimple在SDK封装中的应用 但是&a…

关于逻辑回归的几个函数

写作业时重新理了下&#xff0c;如果有问题欢迎指正&#xff01; 说是回归&#xff0c;其实就是个分类&#xff0c;用【0&#xff0c;1】标记结果y是录取还是录取&#xff0c;而影响结果y的就是X(x0,x1,…xn-1)。怎么判断结果y是0还是1用到的是逻辑回归函数&#xff08;也叫假…

java企业级信息系统开发学习笔记05 初探Spring AOP

文章目录 一、学习目标二、Spring AOP&#xff08;一&#xff09;AOP基本含义&#xff08;二&#xff09;AOP基本作用&#xff08;三&#xff09;AOP和OOP对比&#xff08;四&#xff09;AOP使用方式&#xff08;五&#xff09;AOP基本概念 三、采用配置方法使用AOP&#xff08…

windows下Tomcat安装

目录 1.安装java环境 2.配置Tomcat环境变量 3.安装服务 4.启动前修改配置文件 &#xff08;1&#xff09;设置tomcat端口 &#xff08;2&#xff09;设置临时日志等文件夹的位置 5.放入应用 6.启动Tomcat服务 1.安装java环境 安装tomcat版本对应的JDK 比如&#xff1a;…

Mysql的简介和选择

文章目录 前言一、为什么要使用数据库 数据库的概念为什么要使用数据库二、程序员为什么要学习数据库三、数据库的选择 主流数据库简介使用MySQL的优势版本选择四、Windows 平台下安装与配置MySQL 启动MySQL 服务控制台登录MySQL命令五、Linux 平台下安装与配置MySQL总结 前言…

Redis 分布式锁解决方案

1 背景 我们日常在电商网站购物时经常会遇到一些高并发的场景&#xff0c;例如电商 App 上经常出现的秒杀活动、限量优惠券抢购&#xff0c;还有我们去哪儿网的火车票抢票系统等&#xff0c;这些场景有一个共同特点就是访问量激增&#xff0c;虽然在系统设计时会通过限流、异步…

设计模式:行为型模式 - 责任链模式

文章目录 1.概述2.结构3.案例实现4.优缺点5.源码解析 1.概述 在现实生活中&#xff0c;常常会出现这样的事例&#xff1a;一个请求有多个对象可以处理&#xff0c;但每个对象的处理条件或权限不同。例如&#xff0c;公司员工请假&#xff0c;可批假的领导有部门负责人、副总经…

链表方式实现栈和队列(C语言)

目录 栈 队列 栈 栈&#xff08;Stack&#xff09;是一种常见的数据结构&#xff0c;它是一种线性数据结构&#xff0c;具有后进先出&#xff08;Last In First Out, LIFO&#xff09;的特点。栈可以看作是一个容器&#xff0c;只能在容器的一端进行插入和删除操作&#xff0c…

【12 Filter 学习笔记】

Filter 笔记记录 1. Filter 过滤器2. Filter介绍3. FilterChain3. Filter 过滤器的使用4. 过滤器使用细节5. Filter的声明周期6. FilterConfig7. 过滤器五种拦截行为 1. Filter 过滤器 2. Filter介绍 3. FilterChain 3. Filter 过滤器的使用 import javax.servlet.ServletExcep…

SQL:group by 的用法及其与 over(partition by)的区别

1.group by的作用 根据一定的规则将一个数据集划分成若干个小区域&#xff0c;然后针对每个区域进行数据处理。即分组查询&#xff0c;一般是和聚合函数配合使用。 重点说明&#xff08;重要&#xff09;&#xff1a; 如果用Select选择某个字段&#xff0c;那么这个字段要么在G…

cpld 模拟iic 访问原理实现

1,因为 单片机访问sfp和ds125占用了6路iic,但是现在还有lm75需要使用iic访问,所以要么使用iic片选,但是扩展iic需要的总线不多,这里要么考虑使用互斥锁,也就是使用同一路iic时候加锁,使用完成后就释放。也可以考虑使用cpld模拟iic来访问lm75。 2,cpld 软件模拟iic总线原理…

初识MySql数据库

​​​​使用MySql数据库的英文打字小游戏: 英文打字小游戏 MySql学习 1&#xff1a;MySql是关系型数据库&#xff0c;跨平台的。Sql Server是微软出的啊。 2&#xff1a;Web服务器端运行原理图。 Web服务器&#xff1a;网页资源的获取 游戏服务器&#xff1a;游戏数据的同步…

WEB通讯技术。前端实现SSE长连接,nodejs+express搭建简单服务器,进行接口调试,通过curl请求数据

描述 长连接&#xff08;Keep-Alive&#xff09;是一种HTTP/1.1的持久连接技术&#xff0c;它允许客户端和服务器在一次TCP连接上进行多个HTTP请求和响应&#xff0c;而不必为每个请求/响应建立和断开一个新的连接。长连接有助于减少服务器的负载和提高性能。 长连接的HTTP请…

《Android性能优化》一次失败的启动速度优化

正文 在优化APP启动之前&#xff0c;我们首先需要知道&#xff0c;APP启动时究竟发生了什么&#xff0c;才能有的放矢的优化。 APP的启动过程 APP的启动过程就是指&#xff0c;在手机屏幕上点击某个APP的图标&#xff0c;到APP的首页显示在用户面前的过程。 一般APP的启动过…

Web自动化测试简介及web自动化测试实战交教程

一、认识web自动化测试 1.什么是自动化测试&#xff1f; 自动化测试的概念: 软件自动化测试就是通过测试工具或者其他手段&#xff0c;按照测试人员的预定计划对软件产品进行自动化测试&#xff0c;他是软件测试的一个重要组成部分&#xff0c;能够完成许多手工测试无法完成或…

Linux网络服务----ftp

文章目录 一 、什么是FTP1.1 Standard模式&#xff08;主动模式&#xff09;1.2 Passive模式&#xff08;被动模式&#xff09; 二 、FTP的作用及工作原理2.1 FTP的作用和模式以及通信方式2.2 FTP的工作原理 三、搭建和配置FTP服务3.1 设置匿名用户访问的FTP服务(最大权限)3.2 …

优化改进YOLOv5算法之添加Res2Net模块(超详细)

目录 1 Res2Net 2 YOLOv5中添加Res2Net block 2.1 common.py配置 2.2 yolo.py配置 2.3.3 创建添加Res2Net block模块的YOLOv5的yaml配置文件 1 Res2Net 关于代表性计算机视觉任务的进一步消融研究和实验结果&#xff0c;即目标检测&#xff0c;类激活 mapping和显著目标检…

设计模式:行为型模式 - 观察者模式

文章目录 1.概述2.结构3.案例实现4.优缺点5.使用场景6.JDK中提供的实现 1.概述 定义&#xff1a; 又被称为发布-订阅&#xff08;Publish/Subscribe&#xff09;模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对…

GEE:图像表达式计算——ee.Image.expression()详解

作者: _养乐多_ 在遥感图像处理和分析中,图像的表达式计算是一种常见的操作。利用 Google Earth Engine(GEE)平台的强大功能,可以方便地进行基于图像的表达式计算,从而实现对图像进行灵活、高效的处理和分析。 本文将介绍 GEE 平台中的 ee.Image.expression() 函数及其参…