当前位置: 首页 > news >正文

Python 面向对象编程基础-类的创建与__init__实例化

Python 面向对象编程基础

面向对象编程(OOP)是现代编程语言中的一种重要编程范式,它通过类和对象来组织代码,提高代码的可重用性可维护性。Python是完全支持面向对象编程的语言,它通过类和对象来帮助程序员设计更加模块化和可扩展的代码。

可以理解为:你正在设计一个动物园。你不仅仅是列出动物的名字、年龄、体重等信息,还要给它们设定它们的行为,比如吃饭、走路、叫声等等。面向对象编程就像是你把每个动物视为一个独立的实体,而这个实体有自己的数据和行为,互相独立但又可以互动

可通过此图增加印象:
在这里插入图片描述

为什么要学习面向对象?

学习面向对象编程的原因如下:

  1. 提高代码重用性:面向对象可以通过继承和多态等机制,避免重复编写相似的代码。通过设计合理的类和方法,程序员可以轻松重用已有的代码,而不必每次都从头开始。
  2. 增强代码可维护性:面向对象通过将数据和方法封装到类中,减少了程序各部分之间的依赖,方便修改和扩展。即使项目不断增加功能,修改也会更加集中和有条理。
  3. 更好的代码组织结构:当项目规模增大时,面向对象能够将复杂的系统拆解为更小、更易管理的模块,每个类负责自己的功能,简化了开发过程。
  4. 更贴近现实世界的建模方式:面向对象编程通过类和对象的概念,可以模拟现实世界中的事物和关系,让开发者可以更加自然地描述问题并解决问题。

面向对象编程中的三个重要概念

1. 类的定义

类是面向对象编程中的核心概念之一,它定义了对象的属性和行为。类是创建对象的模板,通过定义类,我们能够创建具有相同属性和方法的多个对象。

2. 什么是类(Class)?

类就像是“动物”的设计图。在现实世界中,不同的动物都有不同的特征和行为,但它们都符合一个基本的模板(比如都是动物)。这个模板就是类,它定义了动物的特征(属性)和行为(方法)。

  • 类就像动物的设计蓝图,比如你设计一份“狗”的蓝图,决定了它有“名字”、“年龄”这些属性,以及“吃饭”、“跑步”等行为。这个蓝图可以用来创建很多不同的狗对象。

3. 什么是对象(Object)?

对象是类的实际体现,是根据类的蓝图创建出来的“具体动物”。每一只狗对象都有自己的名字和年龄,可以吃饭、跑步等。每个对象的属性可以不同,但它们都遵循类定义的规则。
\

  • 对象就是按照设计图制造的具体狗,比如你按照“狗”的蓝图制造一只名叫“旺财”的狗,它有自己的名字和年龄。你可以有很多只狗对象,每只狗都是独立的个体,但它们都符合蓝图。

4. 如何创建一个类?

在Python中,类就像我们为动物设计的蓝图。你通过 class 来定义这个蓝图。

  • 创建类就像你画出一份狗的设计图,你决定了狗的“属性”(如名字、年龄)和“行为”(如吃饭、跑步)。然后你可以用这个设计图来制造无数只不同的狗。

类名的命名规则

  • 类名首字母大写,多个单词之间采用驼峰原则
  • 实例名、模块名采用小写,多个单词之间采用下划线隔开

创建类的语法:

class 类名:类属性名1=类属性值1 (可以参考变量)类属性名2=类属性值2 (可以无限创建属性)def 类方法(参数):  #可以参考函数#类方法代码#类方法2  可以定义多个方法def 类方法(参数):  #可以参考函数#类方法代码#调用类
类名()#调用类下面的方法(可以理解为调用类下面的函数)
类名().方法名()
示例代码:
class Dog:  #创建类为 Doglegs = 4  # 类属性1def return_legs(self):  # 实例方法print(f"正常的狗都有{Dog.legs}条腿!")def return_updata(self):  # 实例方法print(f"我家的旺柴有{Dog.legs}条腿!")s1=Dog() #创建了一个 `Dog` 类的实例。通过 `s1`,我们可以访问 `Dog` 类的方法和属性
print(s1) #输出的是该对象的内存地址#调用了 `Dog` 类的实例方法,通过 `self` 访问了类属性 `legs`,并打印了相关信息
s1.return_legs()
s1.return_updata()

输出示例:

<__main__.Dog object at 0x000001DF510A0160>
正常的狗都有4条腿!
我家的旺柴有4条腿!
解释
  • 创建了一个名为Dog的类,他的类属性有name和age,还创建了return_legsreturn_updata方法,都在方法里面调用类属性name并输出,然后实例化Dog类;以及调用类方法

  • <__main__.Dog object at 0x000001DF510A0160> :这是打印 s1 对象的默认输出,表示对象的内存地址。它告诉你 s1 是一个 Dog 类的实例

PS:改类属性 legs 后,所有方法里面的 legs 属性值都会改变

如何理解 self

  • self 其实是方法内部的一个“指针”,它指向调用该方法的实例对象。所以每个方法的第一个参数 self 都表示当前对象本身
  • 你可以把它看作是一个占位符,具体名称并不重要,通常使用 self 是约定俗成的做法。

为什么要加 self

  • 引用当前实例self 代表了当前对象本身。它使得你能够在类的方法内部访问和操作该对象的属性和其他方法。
  • 每个实例方法都必须有 self,这样才能确保每个对象有自己的独立状态。

如果不加 self 会怎么样?

如果你在实例方法中不加 self,Python 会报错。
这是因为方法定义时,第一个参数必须是 self,以告诉 Python 这个方法是绑定到对象实例上的


5.创建类的实例属性:

他和类属性有什么区别?
  • 类属性:类属性是属于整个类的,所有实例共享该属性。它在类中定义,所有实例对象都能访问。
  • 实例属性:实例属性是通过 __init__ 方法创建的,每个实例都有独立的属性值。__init__ 方法在实例化对象时自动调用,用来初始化对象的状态
类属性与实例属性的比较
属性类型定义位置共享性初始化方式内存消耗适用场景
类属性类体内定义所有实例共享直接在类体内定义内存节省适用于所有实例共享的数据(如常量、默认配置)
实例属性__init__ 方法中定义每个实例独立拥有__init__ 方法中定义增加内存消耗适用于每个实例独特的数据(如对象的状态)
可以理解比喻为:
属性类型比喻适用场景
类属性狗的的腿和耳朵数量(所有狗狗共享)所有实例共享的数据,比如常量、默认设置等。
实例属性每个狗狗的名字、年龄(所有狗狗独立)每个实例需要独立数据和状态的场景,比如个性化的对象数据。

实例属性可以理解为类属性,只是独立还是共享的区别

创建实例属性语法
class 类名:# 类属性 可以理解为创建变量类属性名1 = 类属性值1类属性名2 = 类属性值2# 构造方法(初始化方法)def __init__(self, 参数1, 参数2):# 实例属性 可以理解为创建变量self.实例属性1 = 参数1self.实例属性2 = 参数2# 类方法1  可以理解为创建函数 但是这里是在类下面创建,所以叫方法def 方法名1(self):# 类方法代码print(f"方法1执行,{self.实例属性1}{self.实例属性2}")# 类方法2def 方法名2(self):# 类方法代码print("方法2执行")# 创建类的实例(对象)
obj = 类名(参数1, 参数2)  # 传递必要的参数给构造方法# 调用类的方法
obj.方法1()  # 调用方法1
obj.方法2()  # 调用方法2
示例代码:
class Dog:# 类属性:所有狗狗共享的属性legs = 4  # 正常狗狗的腿数都一样 四条腿def __init__(self, name, breed):# 实例属性:每只狗独有的属性self.name = name  # 每只狗的名字self.breed = breed  # 每只狗的品种# 创建两只不同的狗对象
dog1 = Dog("旺柴", "拉布拉多")
dog2 = Dog("小白", "吉娃娃")# 访问类属性
print(dog1.legs)  # 输出 4
print(dog2.legs)  # 输出 4# 访问实例属性
print(dog1.name)  # 输出 旺柴
print(dog2.name)  # 输出 小白# 修改类属性
Dog.legs = 3
print(dog1.legs)  # 输出 3
print(dog2.legs)  # 输出 3# 修改实例属性
dog1.name = "大黄"
print(dog1.name)  # 输出 大黄
print(dog2.name)  # 输出 小白

解释:

  1. 类属性 (legs)
legs = 4  # 正常狗狗的腿数都一样 四条腿
  • 所有的狗狗共享同样的腿数,这里假设每只狗的腿数都是 4。类属性是所有对象共享的,所以修改了类属性后,所有对象都会受到影响。
  1. 实例属性 (namebreed)
    def __init__(self, name, breed):# 实例属性:每只狗独有的属性self.name = name  # 每只狗的名字self.breed = breed  # 每只狗的品种
  • 每只狗狗的名字和品种是独特的,这些是通过 __init__ 方法在对象创建时传入并设置的。
  • _init__ 方法在 Python 中被称为构造方法(Constructor),它是一个特殊的方法,用于在创建对象时初始化对象的属性
  1. 类的实例化(创建狗狗对象)
dog1 = Dog("旺柴", "拉布拉多") 
dog2 = Dog("小白", "吉娃娃")
  • dog1dog2 是两只不同的狗,分别有不同的名字和品种。
  1. 访问类属性和实例属性
# 访问类属性
print(dog1.legs)  # 输出 4
print(dog2.legs)  # 输出 4#访问实例属性
print(dog1.name)  # 输出 旺柴
print(dog2.name)  # 输出 小白
  • dog1.legsdog2.legs 输出的是类属性 legs 的值,默认是 4。
  • dog1.namedog2.name 输出的是每只狗的实例属性 name
  1. 修改类属性和实例属性
# 修改实例属性
dog1.name = "大黄"
print(dog1.name)  # 输出 大黄
print(dog2.name)  # 输出 小白
  • 修改类属性 legs 后,所有狗对象的 legs 属性都会改变。
  • 修改实例属性 dog1.name 后,只有 dog1 的名字会改变,dog2 的名字保持不变。

总结

本文以动物园管理为生动比喻,系统讲解Python面向对象编程(OOP)核心概念,包括类与对象的定义、类属性实例属性的区别、self关键字的原理及实际应用场景。通过代码示例与类比教学,帮助初学者快速掌握OOP的封装、继承思想,提升代码复用性与可维护性,为开发复杂项目奠定基础。

http://www.xdnf.cn/news/1046467.html

相关文章:

  • [Java 基础]正则表达式
  • 第10章:Neo4j与其他技术集成
  • 图数据库neo4j部分用法浅讲
  • 基于SpringBoot和Leaflet的电影票房时序展示-以《哪吒2》为例
  • 6,TCP客户端
  • 【系统设计【3】】系统设计面试框架:从理论到实践的完整指南
  • 2013-2023年 地级市-财政透明度数据-社科经管实证数据
  • 使用Netlify进行简单部署
  • UE5 仿 鸣潮人物渲染
  • 【项目实训】【项目博客#09】HarmonySmartCodingSystem系统后端智能API检索与代码助手实现(6.2-6.15)
  • Kafka代码模板
  • 论文略读:Can LLMs Solve Longer Math Word Problems Better?
  • React 实现九宫格抽奖游戏
  • 语言特性适用的场景:卫星、火箭控制系统用什么开发语言?
  • 【小沐杂货铺】基于Babylon.JS绘制三维数字地球Earth(GIS 、WebGL、vue、react,提供全部源代码)
  • [windows工具]OCR识文找图工具1.2版本使用教程及注意事项
  • 使用 MCP 驱动的分布式智能扩展 Space-O-RAN
  • 电磁场与电磁波篇---电磁场的边界条件
  • 使用 Canal 实现 MySQL 数据同步的完整指南
  • MIT线性代数第三讲笔记
  • [python] 堆
  • 共享内存实现进程通信
  • 1.MySQL三层结构
  • Faithful Logical Reasoning via Symbolic Chain-of-Thought
  • 组策略关闭 Windows 防火墙指南(企业版/专业版)
  • 关于springMVC 项目 println 输出中文乱码问题,解决方法
  • 人工智能 AGC方向
  • langChainv0.3学习笔记(中级篇)
  • MCP数据可视化服务器配置依赖
  • Vue3 axios 请求设置 signal 信号属性,以便 abort 取消请求