# 【1】面向对象编程
class Student(object):# 可以帮属性值绑定到对象上,self相当于JAVA的thisdef __init__(self, name, age):self.name = nameself.age = agedef speak(self):print(self.name, '说:老师好')if __name__ == '__main__':new_student1 = Student('球球', 20)new_student2 = Student('冷萌', 20)print(new_student1.name, new_student2.name)new_student1.speak()new_student2.speak()
# 【2】方法与属性,就是包含在类里的方法和变量。结合方法和属性才能更优雅的处理复杂逻辑!
# 【3】封装、继承、多态。JAVA很少用继承了,PYTHON应该也相同

面向对象编程(Object-Oriented Programming, OOP)是现代编程语言中最重要的编程范式之一。Python作为一门多范式语言,对面向对象编程提供了全面支持。本文将带你了解Python中面向对象编程的基础知识,并通过实例演示如何在实际开发中应用这些概念。

一、面向对象编程基础

面向对象编程的核心思想是将数据和操作数据的方法组织为"对象"的概念。在Python中,一切都是对象,包括数字、字符串、函数等。

让我们从一个简单的学生类开始:

python

复制

下载

class Student(object):# 初始化方法,相当于构造函数def __init__(self, name, age):self.name = name  # 将name属性绑定到对象上self.age = age    # 将age属性绑定到对象上def speak(self):print(self.name, '说:老师好')

在这个例子中:

  • class 关键字用于定义类

  • object 是所有类的基类

  • __init__ 是类的初始化方法,相当于其他语言中的构造函数

  • self 参数代表类的实例,相当于Java中的this

二、创建和使用对象

创建类的实例非常简单:

python

复制

下载

if __name__ == '__main__':new_student1 = Student('球球', 20)new_student2 = Student('冷萌', 20)print(new_student1.name, new_student2.name)  # 输出: 球球 冷萌new_student1.speak()  # 输出: 球球 说:老师好new_student2.speak()  # 输出: 冷萌 说:老师好

每个对象都有自己独立的状态(属性),但共享相同的行为(方法)。

三、面向对象的三大特性

1. 封装

封装是将数据和对数据的操作捆绑在一起,并隐藏内部实现细节的过程。在Python中,我们可以通过以下方式实现封装:

python

复制

下载

class Student:def __init__(self, name, age):self._name = name  # 单下划线表示受保护的属性self.__age = age    # 双下划线表示私有属性def get_age(self):return self.__agedef set_age(self, age):if age > 0:self.__age = ageelse:print("年龄必须大于0")

2. 继承

继承允许我们定义一个类,继承另一个类的属性和方法:

python

复制

下载

class CollegeStudent(Student):  # 继承Student类def __init__(self, name, age, major):super().__init__(name, age)  # 调用父类的__init__方法self.major = majordef speak(self):print(self._name, '说:教授好')  # 重写父类方法

3. 多态

多态指的是同一操作作用于不同的对象可以有不同的解释:

python

复制

下载

def introduce(person):person.speak()student = Student('张三', 20)
college_student = CollegeStudent('李四', 21, '计算机科学')introduce(student)        # 输出: 张三 说:老师好
introduce(college_student) # 输出: 李四 说:教授好

四、Python面向对象编程的最佳实践

  1. 避免过度使用继承:正如文章开头提到的,现代编程中很少使用深度继承。组合优于继承是更好的选择。

  2. 使用@property装饰器:Python提供了更优雅的属性访问方式

python

复制

下载

class Student:def __init__(self, name):self._name = name@propertydef name(self):return self._name@name.setterdef name(self, value):if not value:raise ValueError("姓名不能为空")self._name = value
  1. 类方法和静态方法:理解何时使用实例方法、类方法和静态方法

python

复制

下载

class Student:count = 0  # 类属性def __init__(self, name):self.name = nameStudent.count += 1@classmethoddef get_count(cls):return cls.count@staticmethoddef is_adult(age):return age >= 18

五、总结

面向对象编程是Python中组织和构建代码的强大工具。通过封装、继承和多态这三大特性,我们可以创建出结构良好、易于维护的代码。然而,在实际开发中,我们应该根据具体需求选择合适的编程范式,而不是盲目使用面向对象。

记住,Python的哲学是"简单优于复杂",在不需要复杂类层次结构的情况下,简单的函数和模块可能更适合你的需求。

希望本文能帮助你更好地理解Python中的面向对象编程!如果你有任何问题或建议,欢迎在评论区留言讨论。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matplotlib 绘制极坐标图

1、功能介绍: 使用了 matplotlib 库来创建一个极坐标图 2、代码部分: import matplotlib.pyplot as plt import numpy as np# 设置中文字体 plt.rcParams[font.sans-serif] [SimHei] # 选择黑体字体,支持中文 plt.rcParams[axes.unicode…

Dask心得与笔记【2】

文章目录 计算参考文献 计算 数组切片如下 import numpy as np import dask.array as dadata np.arange(1000).reshape(10, 100) a da.from_array(data, chunks(5, 20)) print(a[:,0:3])切片结果是前3列 dask.array<getitem, shape(10, 3), dtypeint64, chunksize(5, 3…

数据采集合规安全是品牌控价基石

在品牌控价与数据分析工作中&#xff0c;数据采集是不可或缺的前置环节。当前主流的数据采集方式为爬虫采集&#xff0c;这种依托机器自动化操作的模式&#xff0c;取代了传统人工逐一浏览、复制数据的繁琐流程&#xff0c;大幅提升了效率。采集后的原始数据&#xff0c;会由系…

llm推理赋能action policy的探索

兄弟&#xff0c;你这个问题非常到位&#xff0c;咱分两个问题详细讲透&#xff1a; &#x1f680; (1) HybridVLA怎么引入更好的推理能力赋能Diffusion Action&#xff1f; HybridVLA 目前设计的亮点&#xff1a; Diffusion Token 与 LLM 自回归结合 但推理能力没有被显式结…

spring04-管理bean(创建、注入):基于注解

一、什么是注解&#xff1f; &#xff08;1&#xff09;注解的定义 注解&#xff08;Annotation&#xff09;是 Java 代码中的一种特殊标记&#xff0c;用于在程序运行或编译时提供元信息。 格式&#xff1a; 注解名(属性名属性值, 属性名属性值...)&#xff08;2&#xff…

docker安装elasticsearch和kibana

elasticsearch版本和kibana版本需保持一致。这里我使用的都是8.18.2 安装elasticsearch docker-compose.yml networks:es-net: external: true services:elasticsearch:container_name: es01deploy:resources:limits:cpus: 0memory: 0environment:- discovery.typesingle-no…

Python爬虫实战:研究sanitize库相关技术

1. 引言 1.1 研究背景与意义 在当今数字化时代,互联网已成为人们获取信息、交流互动的重要平台。随着 Web 2.0 技术的发展,用户生成内容 (UGC)、社交媒体嵌入、第三方插件等功能极大丰富了网页的内容和交互性,但也带来了严峻的安全挑战。根据 Web 应用安全联盟 (WAS) 的统…

c++ 学习(二、结构体)

目录 一、结构体与const 二、结构体与class的区别 参考链接&#xff1a;69 结构体-结构体中const使用场景_哔哩哔哩_bilibili 一、结构体与const 调用函数的时候&#xff0c;希望这个结构体是可读而不可写的时候&#xff0c;传指针&#xff0c;使用const修饰&#xff0c;方式…

机器学习开篇:算法分类与开发流程

种一棵树最好的时间是十年前&#xff0c;其次是现在。 一、机器学习算法分类 机器学习&#xff08;ML&#xff0c;Meachine Learning&#xff09;是人工智能的核心领域&#xff0c;让计算机从数据中学习规律并做出预测&#xff0c;本文简单介绍机器学习的算法分类和开发流程。…

使用pyflink编写demo并将任务提交到yarn集群

目录 背景 一、pyflink安装 二、编写demo程序 三、提交yarn前准备 四、提交任务 五、踩坑记录 1、提交任务时客户端出现语法错误 2、提交任务时客户端出现lzma包找不到 3、提交任务时客户端出现“org.apache.flink.streaming.api.utils.PythonTypeUtils.getCollectionIn…

Vue 3 最基础核心知识详解

Vue3作为现代前端主流框架&#xff0c;是前后端开发者都应当掌握的核心技能。本篇文章将带你了解vue3的基础核心知识&#xff0c;适合学习与复习 一、Vue 3 应用创建 1.1 创建Vue应用的基本步骤 // main.js import { createApp } from vue // 1. 导入createApp函数 import …

Bootstrap 5学习教程,从入门到精通,Bootstrap 5 Flex 布局语法知识点及案例(27)

Bootstrap 5 Flex 布局语法知识点及案例 Bootstrap 5 提供了强大的 Flexbox 工具集&#xff0c;让布局变得更加简单灵活。以下是 Bootstrap 5 Flex 布局的完整知识点和详细案例代码。 一、Flex 布局基础语法 1. 启用 Flex 布局 <div class"d-flex">我是一个…

HarmonyOS 5智能单词应用开发:记忆卡(附:源码

一、应用概述与核心价值 在语言学习过程中&#xff0c;单词记忆是基础也是难点。本文介绍的智能单词记忆卡应用通过创新的交互设计和科学的学习模式&#xff0c;帮助用户高效记忆单词。应用采用ArkUI框架开发&#xff0c;主要特点包括&#xff1a; 双模式学习系统&#xff1a…

LeetCode--38.外观数列

前言&#xff1a;之前我不是说&#xff0c;我后续可能会讲一下递归吗&#xff0c;现在它来了&#xff0c;这道题会用到回溯的方法&#xff0c;并且比较纯粹哦 解题思路&#xff1a; 1.获取信息&#xff1a;&#xff08;下面这些信息差不多是力扣上面的题目信息了&#xff0c;所…

服务器的安装与安全设置

1&#xff1a;安装操作系统 1、创建虚拟机Win49&#xff08;49为序号&#xff09;&#xff0c;并安装Windows Server 2019操作系统 参考配置&#xff1a;安装系统的分区大小为20GB&#xff0c;其余分区暂不划分&#xff0c; 文件系统格式为NTFS&#…

Sensodrive SensoJoint机器人力控关节模组抗振动+Sensodrive力反馈系统精准对接

Sensodrive成立于2003年&#xff0c;起源于德国航空航天中心&#xff08;DLR&#xff09;的LBR项目。公司由一批传感器技术专家创立&#xff0c;专注于高精度工业扭矩传感器的研发。凭借二十余年的技术积累&#xff0c;Sensodrive将DLR轻型机器人扭矩技术引入工业领域&#xff…

【AI实践】Mac一天熟悉AI模型智能体应用(百炼版)

25.6.29增加Gummy 实时/一句话语音识别25.6.28增加Qwen TTS本地音频和实时播报 背景 准备环境 MacOS M1电脑&#xff08;其他M系列芯片也可以&#xff09; 为了方便python的使用环境&#xff0c;使用Miniconda&#xff1a;下载链接&#xff1a;Download Anaconda Distribution…

WEB安全--Java安全--jsp webshell免杀1

1.1、BCEL ClassLoader 介绍&#xff08;仅适用于BCEL 6.0以下&#xff09;&#xff1a; BCEL&#xff08;Apache Commons BCEL™&#xff09;是一个用于分析、创建和操纵Java类文件的工具库&#xff1b;BCEL的类加载器在解析类名时会对ClassName中有$$BCEL$$标识的类做特殊处…

Valkey与Redis评估对比:开源替代方案的技术演进

#作者&#xff1a;朱雷 文章目录 1 概述1.1内存数据结构存储核心特性1.2主流内存数据结构存储设计与适用场景1.3目前主流内存数据结构存储对比 2 Valkey 说明2.1 哨兵架构设计2.2 集群架构设计2.3 valkey 使用企业和业内生态‌ 3 评估指标4 评估结果 1 概述 内存数据结构存储…

华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio安装NoteGen AI笔记应用程序

华为云FlexusDeepSeek征文 | 基于华为云ModelArts Studio安装NoteGen AI笔记应用程序 引言一、ModelArts Studio平台介绍华为云ModelArts Studio简介ModelArts Studio主要特点 二、NoteGen介绍NoteGen简介主要特点 三、安装NoteGen工具下载NoteGen软件安装NoteGen工具 四、开通…