【Python】初识类与对象

2023-11-02

面向对象的编程思想(OOP),面向对象的编程思想与之前面向过程的编程思想不同。面向对象的编程思想着重强调要细分职责和工作。例如有加减乘除四个运算方法,我们需要处理的数据有实数和虚数,我们需要将这两种数据独立进行运算,那么此时我们就将这些四则运算的方法都分别封装在实数和虚数的对象中,这样我们需要计算数据时就直接使用对象里的方法即可。与面向过程的方式不同,面向过程着重强调需要什么任务就调用哪些方法,强调步骤性和先后顺序,这样当方法功能多时,容易造成混乱。

目录

类与对象

类与对象的定义:

创建类和对象:

初始化类和对象:

内置方法:


类与对象

类与对象的定义:

所谓类就是具有相同属性和行为的一类事物的模板,例如人就可以看为一个类,具有如吃饭,睡觉等行为,具有劳动、摸鱼等属性。对象就是根据这个类模板具体实例化出来的一个个“人”。

创建类和对象:

定义一个类的方法是使用class关键字,然后类似于函数那样输入类名和冒号,下面就写类里面的方法和属性。注意,这里的方法的第一个形参都要是self,如果后续再需要参数,则需要跟在self后面。这里的self参数与C++里类的this指针有点像,self参数是用来定位一个特定的对象的,就是我们创建一个类后可能不止创建一个对象,但是这些对象都要用同一个模板,此时我们模板里的方法就可以通过self来确定调用方法的是哪一个对象。

创建好一个类后,我们可以着手创建一个对象,对象的创建就是以 对象名 = 类名()的形式。其中我们每创建一个对象都与我们创建一个新的变量类似,我们的每个对象变量的名都是对某个对象的一种引用。所以如果我们创建多个对象,那么这些对象互不相同;而如果我们将一个对象赋给另一个对象,那么这两个对象则一样。例如下图创建一个学生类:

StuA = Info()

Python中创建一个类与C++中创建一个类比较相似:

Python:

class Info:

    def func1(self):
        print("hello,python")

    def func2(self, func2_a):
        return func2_a
    


StuA = Info()
StuA.func1()

C++:

class Info
{
public:
	void func1()
	{
		cout<<"hello,world!" << endl;
	}
	int func2(int get)
	{
		this->a = get;
		return get;
	}
	int a;
	string s;
};

int main()
{
	Info Stu1;
	Stu1.func1();
	return 0;
}

初始化类和对象:

当我们创建完一个类对象时,我们或许需要对这个对象的属性进行初始化设置,此时就需要用到类内置的方法:__init__。这个方法是不需要我们手动调用它也会在创建对象时调用的。其中我们创建类的属性时也是需要调用到这个初始化方法。具体定义一个属性是:self.属性名 = 数据,这样我们就可以得到一个类里的属性。

class Info:

    def __init__(self):
        self.name = "l"
        self.age = 15

此时创建出来的属性就是所以此类对象拥有的共同属性。但是这种创建方法有一个问题,那就是每一个属性都需要有初始值,这样就比较固定了,要想更加灵活,我们可以像C++里的有参构造一样,给init方法指定形参,让属性接受形参,这样就可以实现多样化初始化了。

class Info:

    def __init__(self, name, age):
        self.m_name = name
        self.m_age = age


StuA = Info("l", 19)
StuB = Info("h", 17)

既然有初始化对象,那就不得不提一下销毁对象,当我们创建完一个对象后,如果我们不需要继续用了,我们可能会使用del 函数来删掉这个对象,此时类就会自动调用__del__方法来对对象的内容进行删除,释放内存。

内置方法:

在类的内部是内置有很多的方法的,这些方法也可以理解为一个个的函数,这些方法都是可以适用于所有类的操作。要是想查看类的方法,我们可以利用dir函数。其中函数参数就是类名。

dir(Info)

下面就是我显示出来的类的内置方法:

不难发现,其实我们之前用的__init__和__del__方法都是一个类中的内置方法。下面我们来看看一个有意思的内置方法:__str__。这个方法有什么用呢?我们先来看看如果我们要用print函数输出对象,会得到什么?

 我们可以发现,如果我们用print函数输出对象名,此时我们得到的会是一个地址,一个存储对象的内存地址,但是要是我们不想要这个输出呢?我们此时可以用__str__方法来调整我们利用print输出的字符串,这个方法需要我们返回一个新的字符串,这个字符串将作为print输出的新内容。

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

【Python】初识类与对象 的相关文章

随机推荐

  • vulnhub靶场 DC-1

    过程曲曲折折 中途还看了下题解才断断续续的完成这个靶场 只能说技术不到家 攻击机 kali ip 192 168 16 134 靶场 ip 192 168 16 149 首先是到vulnhub官网去下载DC 1的靶场这里就不讲如何下载了 直
  • 【100天精通python】Day34:使用python操作数据库_ORM(SQLAlchemy)使用

    目录 专栏导读 1 ORM 概述 2 SQLAlchemy 概述 3 ORM SQLAlchemy使用 3 1 安装SQLAlchemy 3 2 定义数据库模型类 3 3 创建数据表 3 4 插入数据 3 5 查询数据 3 6 更新数据 3
  • SpringBoot 系统全局异常处理

    1 编写系统全局异常处理类要求 1 定义全局异常处理类 使用 ControllerAdvice 注解标签修饰 2 处理指定异常类信息 通过 ExceptionHandler 注解标签修饰 3 处理指定异常类是否向前端返回错误信息 如果需要向
  • Restful API 的设计规范

    Restful API 的设计规范 Restful API 的设计规范 1 URI URI规范 资源集合 vs 单个资源 避免层级过深的URI 对Composite资源的访问 2 Request HTTP方法 安全性和幂等性 复杂查询 Bo
  • Effective STL学习

    引言 以下为个人的一些读书心得 对于部分比较浅显易懂的就不再赘述 只是日常使用中不太会留意到的加以解释 第一章 容器 第一条 慎重选择容器类型 第二条 不要试图编写独立于容器类型的代码 第三条 确保容器中的对象拷贝正确而高效 第四条 调用e
  • Android 模拟双击点赞脚本

    以下代码通过GPT3 5生成 bin bash 点击次数范围 CLICK COUNT MIN 20 CLICK COUNT MAX 30 每次点击间隔范围 CLICK INTERVAL MIN 3000 CLICK INTERVAL MAX
  • STM32F103C8T6在线升级 IAP

    stm32程序每次执行都会从基地址0x800 0000开始执行 IAP程序升级的执行是在bootloader引导文件执行后 进行加载 跳转APP程序 所以每次上电后进入BootLoader判断是否需要升级 如果升级则接受bin文件 如果不升
  • 关于micropython无法计算MD5的问题 AttributeError: ‘module‘ object has no attribute ‘md5‘

    不可能 绝对不可能 我大MPY不能算md5 我一试还特么真是 文档写的明明白白 一跑就是没有方法 AttributeError module object has no attribute md5 mpy 你在干什么 这个错误好几年没有修
  • 容器部署虚拟机还是物理服务器,容器docker装在虚拟机上吗

    容器 无论是虚拟机还是物理机 都是硬件 基础设施的一种交付方式 本质上是一个层次的 而容器主要要解决以软件为中心的系列问题 开发 测试 部署 发布 运行 在虚拟机中运行容器 已经成为一种实践中的惯例 比如 AWS的container服务就是
  • JVM--基础--26.1--工具--jps

    JVM 基础 26 1 工具 jps 1 介绍 查看所有的jvm进程 包括进程ID 进程启动的路径等等 2 语法 2 1 格式 jps options hostid 2 2 参数说明 2 2 1 options q 只输出java进程的进程
  • el-date-picker 兼容IE浏览器

    一 问题描述 element组件之el date picker 在chrome浏览器中正常显示 而在IE浏览器却无法显示值 此时 需要设置value format属性
  • window.open同时打开多个页面

    在项目中遇到一个问题 需要点击按钮以后同时打开两个页面 我使用了window open方法 但是最后的表现是只打开了第一个 第二个被吞了 调试的浏览器是chrome 然后在浏览器地址栏的右边弹出一个小图标 点击发现是浏览器自动拦截弹出式窗口
  • Storm 常见问题

    原文 http weyo me pages techs storm questions Storm 安装与运维问题 运行 storm 命令报错 出现语法错误 File home storm apache storm 0 9 3 bin st
  • 浮点数转日期

    在实际工作中发现 在导入excel时 读取cell时 经常有人将日期变成了一个double类型 该double类型的整数部分表示1900年以来的天数 小数表示当天的描述 因此 在Python中 就可以用timedelta进行加减 计算出该d
  • scrapy的注意点的问题

    1 以豆瓣网为例分享一下scrapy使用中需要注意的地方 2 注意点 response xpath方法的返回结果是一个类似list的类型 其中包含的是selector对象 操作和列表一样 但是有一些额外的方法 extract 返回一个包含有
  • 项目中添加水印

    1 在libs文件夹下新建watermark js文件 watermark js文件下代码 let watermark let setWatermark str gt let id 1 23452384164 123412415 if do
  • Spring Boot 大型线上商城项目实战教程

    小册介绍 小册将从开发基础阶段讲解 之后介绍技术选型 系统设计 实际开发等过程 给你最真实的项目体验 让你少走弯路快速成长 小册将围绕 Spring Boot 技术栈 使用的其它技术框架也会兼顾最新技术动向 对知识进行拓展 由浅入深 步步为
  • spring源码解析之AOP原理

    一 准备工作 在这里我先简单记录下如何实现一个aop AOP 动态代理 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式 1 导入aop模块 Spring AOP spring aspects 2 定义一个业务逻辑类
  • 机器人视觉抓取论文及代码资源

    Vision based Robotic Grasping Papers and Codes According to the kinds of grasp the methods of vision based robotic grasp
  • 【Python】初识类与对象

    面向对象的编程思想 OOP 面向对象的编程思想与之前面向过程的编程思想不同 面向对象的编程思想着重强调要细分职责和工作 例如有加减乘除四个运算方法 我们需要处理的数据有实数和虚数 我们需要将这两种数据独立进行运算 那么此时我们就将这些四则运