韩顺平 | 零基础快速学Python(12) OOP基础

news/2025/6/19 17:11:55

面向对象编程-基础

类与对象

类提供了把数据和功能绑定在一起的方法。创建新类时创建了新的对象类型,从而能够创建该类型的新实例/对象
类时抽象的概念,作为数据类型代表一类事物;对象时具体实际的,作为实例代表具体事物;类是对象的模板,对象是类的个体,对应一个实例。
对象在内存中的存在形式:
在这里插入图片描述

属性/成员变量

类中定义的属性(变量),也称为成员变量
属性名 = 值 如果没有值可以赋值None,None是Python的内置常量,通常被用来代表空值的对象

类的定义

class 类名:属性/成员变量...行为/成员方法...

对象的传递机制

在这里插入图片描述

class Person:age = Nonename = Namea = Person()
a.age = 10
a.name = "jack"
b = a 
print(b.name) #jack
b.age = 200
b = None # NoneType
print(a.age) # 200
print(b.age) #报错

对象的布尔值

Python一切皆对象,所有的对象都有一个布尔值,通过内置函数bool()可获取对象的布尔值
False:False、数值0、None、空数据容器

成员方法

类中定义的行为(函数),称为成员方法/方法。

def 方法名(self, 形参列表):方法体
  • Python也支持对象动态的添加方法,注意只是针对该对象添加方法 对象.添加的方法名 = 指定方法名
class Person:age = Nonename = Namedef ok(self):print("ok")def hi:print("hi")p = Person()
p.m1 = hi
print(type(p.m1), type(hi)) #<class 'function'> <class 'function'>
print(type(p.ok)) # <class 'method'> 运行机制一样,只是名称叫法不同

self

self表示当前对象本身,在成员方法内,访问对象的属性/成员变量self.属性/成员变量

  • 当我们通过对象调用方法时,self会隐式传入
  • 定义成员方法时,需要写上self,如果不写,则需要使用@staticmethod标注,否则会报错。
  • @staticmethod将方普通法转换为静态方法。静态方法不会接收隐式第一个参数。静态方法相比普通方法,处额可以通过对象调用,还可以通过类名调用。
class Dog:name = "哈士奇"age = 2def info(self, name):print(f"name信息->{name}")@staticmethoddef ok():print("ok")dog = Dog()
dog.info("德牧")
dog.ok()
Dog.ok()

对象作为传参传递

在这里插入图片描述

作用域

成员变量/属性:类中定义的变量,作用域为整个类
局部变量:一般指成员方法中定义的变量,作用域为当前方法
属性和局部变量可以重名,访问的时候带上self代表访问属性

构造方法

需求:用类创建对象时,即指定属性
在初始化对象时,会自动执行__init__方法,传入的参数会自动传递给__init__方法

class Person:name = Noneage = Nonedef __init__(self, name, age):print(f"__init__方法执行了 {name} {age}")self.name = nameself.age = agep1 = Person("kobe", 20) # __init__方法执行了 kobe 20
  • 构造方法没有返回值
  • Python语言中,一个类只有一个__init__方法,即使写了多个,也只有最后一个生效。Python中实现多个构造方法效果的办法
  • Python可以动态地生成对象属性。
class Person:# 类没定义属性# name = None# age = None																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									def __init__(self, name, age):print(f"__init__方法执行了 {name} {age}")# 此处动态生成属性self.name = nameself.age = agep1 = Person("kobe", 20) # __init__方法执行了 kobe 20

https://dhexx.cn/news/show-5318032.html

相关文章

第十六届“华中杯”大学生数学建模挑战赛B题思路

B题 使用行车轨迹估计交通信号灯周期问题 某电子地图服务商希望获取城市路网中所有交通信号灯的红绿周期,以便为司机提供更好的导航服务。由于许多信号灯未接入网络,无法直接从交通管理部门获取所有信号灯的数据,也不可能在所有路口安排人工读取信号灯周期信息。所以,该公…

【Linux系列】Ctrl + R 的使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【C 数据结构】静态链表

文章目录 【 1. 基本原理 】1.1 静态链表中的节点1.2 备用链表 【 2. 静态链表的创建 】2.1 实例1 - 创建静态链表&#xff0c;指定值2.2 实例2 - 创建静态链表&#xff0c;默认值 【 3. 静态链表 添加元素 】【 4. 静态链表 删除元素 】【 5. 静态链表 查找元素 】【 6. 静态链…

Linux的学习之路:5、粘滞位与vim

摘要 这里主要是把上章没说完的权限的粘滞位说一下&#xff0c;然后就是vim的一些操作。 目录 摘要 一、粘滞位 二、权限总结 三、vim的基本概念 四、vim的基本操作 五、vim正常模式命令集 1、插入模式 2、从插入模式切换为命令模式 3、移动光标 4、删除文字 5、复…

Storm详细配置

要详细配置 Apache Storm&#xff0c;你需要关注以下几个方面&#xff1a; Topology配置&#xff1a; ● 定义你的拓扑结构&#xff0c;包括哪些Spout和Bolt将被使用&#xff0c;它们之间的连接关系&#xff0c;以及拓扑如何处理数据流。 ● 设置每个组件的并行度&#xff0c…

【php快速上手(八)】

目录 PHP快速上手&#xff08;八&#xff09;PHP 数组1. 数组的定义2. 数组的操作3. 多维数组4. 数组遍历 PHP数组排序1. 排序索引数组2. 排序关联数组3. 自然排序4. 自定义排序 PHP快速上手&#xff08;八&#xff09; PHP 数组 在 PHP 中&#xff0c;数组是一种数据结构&am…

最大公约数和最小公倍数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现最大公约数函数&#xff1b; int max(int x, int y) {//初始化变量值&#xff1b;int judge 1;//运算&#xff1b;judge x %…

【0281】 Postgres内核级事务系统架构(重点)

文章目录 1. 事务系统架构1. 1 示例演示2. 事务终止2.1 低级别事务终止2.2 子事务处理3. 事务和子事务编号4. 联锁事务开始、事务结束和快照5. pg_xact 和 pg_subtrans6. 预写式日志(Write Ahead Log)1. 事务系统架构 PostgreSQL的事务系统是一个三层系统。底层实现了低级事务…

【软考】UML中的图之用例图

目录 1. 说明2. 建模2.1 说明2.2 语境建模2.3 需求建模 3. 图示4. 组成部分 1. 说明 1.用例图&#xff08;Use Case Diagram&#xff09;。2.展现了一组用例、参与者&#xff08;Actor&#xff09;以及它们之间的关系。3.用例图通常包括以下的内容&#xff1a;用例、参与者、用…

FebHost:注册.CA域名的企业有什么限制?

在加拿大&#xff0c;只要满足加拿大互联网注册管理局的“加拿大注册要求”&#xff0c;任何类型的企业都可以注册.CA域名。这些要求的目的是为了确保.CA域名空间作为一个重要的公共资源得到合理的使用和开发&#xff0c;以促进所有加拿大人的社会和经济发展。 以下是一些主要…