python面向对象之类和对象相关知识

news2025/7/10 20:01:05

python面向对象之类和对象相关知识

一、面向对象简介

1、什么是面向对象

面向对象是一种编程思想,把数据和对数据的多个操作方法封装在一起组成类,这样通过这个类创建出来的对象,就可以直接调用这些方法了。

2、面向对象相关的术语

  • 类:用来描述具有相同的属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法。可以理解为一个模板,通过它可以创建出无数个具体实例,对象是类的实例。
  • 对象:类并不能直接使用,通过类创建出的实例(又称对象)才能使用。即对象是通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
  • 属性:类中的所有变量称为属性。
  • 方法:类中定义的函数通常称为方法。但和函数所有不同的是,类方法至少要包含一个 self 参数
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
  • 局部变量:定义在方法中的变量,只作用于当前实例的类。
  • 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
  • 继承:即一个派生类继承基类的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖,也称为方法的重写。
  • 实例化:创建一个类的实例,类的具体对象。

二、类和对象

1、创建类

使用 class 关键字来创建类,类名的命名规则按照 “大驼峰命名法” (每个单词的首字母大写),定义类时有两种形式:
形式一(经典类定义形式):不写继承的父类,默认继承object

class 类名:
  类成员,方法,数据属性

形式二(新式类定义形式):在类名后指定继承object这个类

class 类名(object):
  类成员,方法,数据属性

示例

# 创建一个名为 MyClass 的类, x 为的属性名
class MyClass:
    x = 10

2、创建对象

可以根据已经定义的类去创建出一个或多个对象。创建对象的方式类似函数调用的方式
示例

# 使用名为 MyClass 的类来创建对象

class MyClass:
    x = 10

# 创建一个名为 p 的对象
p = MyClass()

3、pass 语句

类定义不能为空,但是如果要写无内容的类定义语句,需使用 pass 语句来避免错误
示例

class Person:
    pass

4、对象的属性

4.1 访问对象的属性

使用点号 . 来访问对象的属性
示例

class MyClass:
    x = 10

# 创建一个名为 p 的对象,并打印 x 的值
p = MyClass()
print(p.x)

运行结果:
请添加图片描述

4.2 添加对象的属性

使用点号 . 给对象添加属性
示例

class Person:
    pass

# 对象
p = Person()

# 给对象添加属性及对应的属性值
p.name = "Cindy"
p.age = 10

# 通点号 . 获取对象的属性值
print("姓名是:%s,年龄是:%d" % (p.name, p.age))

运行结果:
请添加图片描述

4.3 修改对象的属性

示例

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def info(self):
        print("姓名是:%s" % self.name)
        print("年龄是:%d" % self.age)

p = Person("Cindy",10)
print(p.age)

# 把 p 的年龄设置为 12
p.age = 12
print(p.age)

运行结果:
请添加图片描述

4.4 删除对象的属性

使用 del 关键字删除对象的属性(删除对象也用del关键字)
示例

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def info(self):
        print("姓名是:%s" % self.name)
        print("年龄是:%d" % self.age)

p = Person("Cindy",10)

# 删除 p 对象的 age 属性
del p.age

print(p.age)

运行结果:
请添加图片描述

5、self 参数

类的方法与普通的函数有一个区别是:类的方法必须有一个额外的第一个参数名称, 按照惯例它被命名为 self 。self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。self 参数是对类的当前实例的引用,代表当前对象的地址,用于访问属于该类的变量。
示例

class MyClass:
    def info(self):
        print(self)

m = MyClass()

# 点号 . 表示选择属性或者方法
# 对象调用实例方法info(),执行info()里面的代码
m.info()

# 打印对象,默认打印对象在内存中的地址,结果等同于info里面的 print(self)
print(m)

运行结果:
请添加图片描述

它不必按照惯例被命名为 self,我们可以取其他的名字,但它必须是类中任意函数的首个参数
示例

# 使用abc 和 xyz 代替 self
class MyClass:
    def info(abc):
        print(abc)

    def myfunc(xyz):
        print(xyz)

m = MyClass()

m.info()

m.myfunc()

print(m)

运行结果:
请添加图片描述

6、__ init __() 函数

内置的 __ init __() 函数是一种特殊的方法,所有类都有一个名为 __ init __() 的函数,被称为类的构造函数或初始化方法,每次使用类创建新对象时都会自动调用 __ init __() 函数。如果类里面没有写 __ init __() 方法。Python会自动创建,但是不执行任何操作,如果想用来做变量初始化或赋值操作,可以自定义 __ init __() 方法
示例1

class Person:
    # 在类实例化对象的时候,会被自动调用
    def __init__(self):
        # self代表当前类的实例对象,self.name表示将name绑定到实例上,即该类了有实例属性name。并给其赋值
        self.name = "Cindy"
        self.age = 10

    def info(self):
        # 在类的实例方法中,通过self获取该对象的属性
        print("姓名是:%s" % self.name)
        print("年龄是:%d" % self.age)

# 在类的方法里定义属性的固定值,则每个对象实例变量的属性值都是相同的
p1 = Person()
p1.info()

p2 = Person()
p2.info()

运行结果:
请添加图片描述

示例2

class Person:
    # 在类实例化对象的时候,会被自动调用
    def __init__(self,name,age):
        # self代表当前类的实例对象,self.name表示将name绑定到实例上,即该类了有实例属性name,等号右边的name表示__init__()中的参数name。
        # self.name = name 表示把外部传来的参数name值赋值给Person类里自己的变量name
        self.name = name
        self.age = age

    def info(self):
        # 在类的实例方法中,通过self获取该对象的属性
        print("姓名是:%s" % self.name)
        print("年龄是:%d" % self.age)

# 实例化对象时,参数会传递到对象的_init_()方法里
p1 = Person("Cindy",10)
p1.info()

p2 = Person("Bob",12)
p2.info()

运行结果:
请添加图片描述

补充:
在类内部获取属性和实例方法,通过self获取
在类外部获取属性和实例方法,通过对象名点号获取

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

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

相关文章

一次金融APP的解密历程

声明:本文仅限于技术讨论与分享,严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负,与本号及原作者无关。 前言: 客户仅提供官网下载地址给我们测试。但是由于官网的版本不是最新的,APP会强制你升级。而…

搭建lamp平台

apache安装步骤 检查是否已经rpm安装httpd服务,已安装则卸载服务。 [rootlocalhost ~]# rpm -e rpm -qa | grep httpd --nodeps 开发工具安装 如果编译安装无法执行,可能是开发工具没有安装,执行下面命令即可安装。(如已安装则跳…

【springboot进阶】优雅使用 MapStruct 进行类复制

项目中经常会遇到这样的一个情况:从数据库读取到数据,并不是直接返回给前端做展示的,还需要字段的加工,例如记录的时间戳是不需要的、一些敏感数据更是不能等等。传统的做法就是创建一个新的类,然后写一堆的get/set方法…

数据结构【队列】

文章目录(一)队列定义(二)队列实现(1)创建结构体(2)具体函数实现及解析1.1 初始化队列1.2入队列1.3出队列1.4取队首元素1.5取队尾元素1.6返回队列个数1.7判断是否为空1.8销毁队列&am…

springCloud的 consul的下载与安装

下载地址:Install | Consul | HashiCorp Developer 下载自己需要使用的版本 下载后会有一个exe 文件通过cmd 命令行来执行这个exe 文件consul agent -dev -client0.0.0.0 出现此页面后执行8500 端口 请求地址:http://127.0.0.1:8500/ 出现此页面说明启…

黑苹果入门:必备工具篇

以下给大家汇总的这些软件工具都是我们在安装使用黑苹果过程中可能会用到的,至于使用方法,在这里我就不做过多介绍了。 本次只提供软件下载地址,不提供使用方法,不知道如何使用软件工具的童鞋,可以在百度翻翻相关教程…

第5章 C语言高级的库函数

文章目录文档配套视频讲解链接地址第05章 C库函数5.1 assert.h 断言库5.2 ctype.h 测试和映射字符5.3 math.h 数学库5.4 stdlib.h 标准库1. 字符串转整数、浮点数2. strtod 把字符串中的数字转换成浮点数并返回数字的下一个字符的位置3. strtol 字符串转整数4. strtoul 字符串转…

vue3 antd多级动态菜单(二)后台管理系统(两种方法过滤有无子菜单children)

vue3 antd 多级动态菜单(精修版本) 两种方法实现对children的筛选相关文章推送(供参考)场景复现实现效果解决方法hasChildren与noChilren函数过滤v-if v-else判断有无children【推荐】🔥两种方法公用代码sunmmary下期预…

ESP32 入门笔记06: WIFI时钟 + FreeRTOS+《两只老虎》 (ESP32 for Arduino IDE)

ESP32FreeRTOS Esp32 模块中已经提供了 FreeRTOS(实时操作系统)固件。 FreeRTOS有助于提高系统性能和管理模块的资源。FreeRTOS允许用户处理多项任务,如测量传感器读数,发出网络请求,控制电机速度等,所有…

靶向肿瘤代谢,助力攻克癌症

肿瘤代谢的简介 肿瘤代谢的起源在于奥托沃伯格 (Otto Warburg) 的假设,他也因发现线粒体呼吸链复合物 IV 而获得 1931 年诺贝尔生理学或医学奖。Warburg 观察到,与正常组织相比,体外癌组织切片使用大量葡萄糖生成乳酸 (即使在有氧的情况下也是…

SBT10100VDC-ASEMI低压降贴片肖特基二极管SBT10100VDC

编辑-Z SBT10100VDC在TO-263封装里采用的2个芯片,其尺寸都是62MIL,是一款低压降贴片肖特基二极管。SBT10100VDC的浪涌电流Ifsm为150A,漏电流(Ir)为4uA,其工作时耐温度范围为-65~150摄氏度。SBT10100VDC采用金属硅芯片材质&#x…

QScintilla代码跳转时indicator工作不正确的问题

首先看我这几个文章,知道一下indicator是什么,以及上下文: https://biao2488890051.blog.csdn.net/article/details/126798996?spm1001.2014.3001.5502 目标: 我现在要做按住 ctrl 鼠标左键点击释放 发生函数/变量的 定义/声明…

Pandas中你一定要掌握的时间序列相关高级功能

💡 作者:韩信子ShowMeAI 📘 数据分析实战系列:https://www.showmeai.tech/tutorials/40 📘 本文地址:https://www.showmeai.tech/article-detail/389 📢 声明:版权所有,转…

ceph浅谈

总谈 ceph简介 用上ceph,多台机器的磁盘空间在一起了,在一台机器上就可以看到使用所有空间。 还可以保存多份安全备份 存储先ceph,自我管理修复,跨机房,节点越多,并行化,论上,节点越…

【虚幻引擎UE】UE5 实现相机录制视频并导出(C++调用外部exe)

说明: 该功能暂不支持导出声音。 由于OpenCV3和UE5不太兼容,因此考虑制作外部exe实现视频合成。 一、创建渲染目标 二、创建Actor加场景捕获组件2D 三、创建UE5内的C++代码 1、实现 SavePicToFile 导出图片蓝图函数 .cpp文件 // Fill out your copyright notice in the De…

数字集成电路设计(二、Verilog HDL基础知识)

文章目录1. 语言要素1.1 空白符1.2 注释符1.3 标识符1.3.1 转义标识符1.4 关键字1.5 数值1.5.1 整数及其表示方式1.5.2 实数及其表示方式1.5.3 字符串及其表示方式2. 数据类型2.1 物理数据类型2.1.1 连线型2.1.2 寄存器型2.2 连线型和寄存器型数据类型的声明2.2.1 连线型数据类…

深入了解海豚调度DolphinScheduler

深入了解海豚调度DolphinScheduler一、海豚调度介绍二、海豚调度特性三、建议配置四、名词解释五、模块介绍六、功能介绍1.项目首页2.工作流定义3.工作流实例4.任务实例5.任务定义七、任务类型1.SQL2.SPARK节点3.Apache Zeppelin八、集群部署1.前置准备工作2.准备 DolphinSched…

实现注册与登录模块

目录 1、加载依赖 2、实现jwt工具类jwtUtil类 3、实现config.filter.JwtAuthenticationTokenFilter类 4、配置config.SecurityConfig类 5、创建后端api之前对数据库进行修改 6、写API一共需要的三个地方 7、实现三个接口 8、验证用户登录用API调试 9、https://jwt.io/解…

MySQL表的增删查改(CRUD)

文章目录前言一、新增数据二、查询数据全列查询指定列查询表达式查询指定别名查询去重查询排序查询条件查询分页查询三、修改数据四、删除数据前言 CRUD代表: 增加(create) ,查询(retrieve) ,更新(update) ,删除(delete) 单词首字母。 一、新增数据 SQL使用insert关键字来表…

二叉搜索树、红黑树详解、红黑树高的应用、TreeMap的应用(图文详解)-Kotlin版本代码

二叉搜索树 何为二叉搜索树? 二叉搜索树是一种特殊的二叉树,它的左子节点总是小于或等于根节点,而右子节点 总是大于或等于根节点。 如下图,即是一颗二叉搜索树。 对于二叉搜索树来说,中序遍历可以遍历按照节点值…