面向对象编程——python

目录

一、面向对象编程        

1.1 类和对象

1.2 继承

1.3 封装

1.4 多态

1.5 Python中的面向对象编程

二、类、对象和变量

2.1 类(Class)

2.2.1 类的属性(Class Attributes)

2.2.2 类的方法(Class Methods)

2.2 对象(Object)

2.3 变量(Variable)

三、总结


一、面向对象编程        

        面向对象编程(Object-Oriented Programming,简称 OOP)是一种编程范式,它使用“对象”来设计软件。在这种范式中,对象是类的实例,类定义了对象的数据属性和可执行的操作(即方法)。面向对象编程的主要目标是增加软件的重用性、灵活性和扩展性。

1.1 类和对象

        类(Class):定义了一组属性和方法的蓝图。类是对象的模板,确定了对象的数据结构和行为。

        对象(Object):类的实例。每个对象都拥有类中定义的属性和方法。

1.2 继承

        允许一个类继承另一个类的特性。子类继承父类的公共接口,这样代码可以被重用,并且可以创建出层次结构。

1.3 封装

        将数据(属性)和代码(方法)捆绑在一起,形成一个独立的对象。这种机制可以隐藏内部实现细节,只暴露必要的操作接口。

1.4 多态

        允许以统一的方式处理不同类的对象。通常通过方法重写(子类定义与父类同名的方法)和接口(定义可以由多个类实现的同一套操作)实现。

1.5 Python中的面向对象编程

        Python 是一种支持多范式的语言,包括面向对象编程。下面是一个简单的 Python 中使用 OOP 的例子:

# 定义一个类
class Animal:def __init__(self, name):  # 构造函数self.name = name  # 属性def speak(self):  # 方法raise NotImplementedError("Subclass must implement abstract method")# 定义继承自 Animal 的类
class Dog(Animal):def speak(self):return "Woof!"class Cat(Animal):def speak(self):return "Meow!"# 使用类创建对象
dog = Dog("Buddy")
cat = Cat("Whiskers")# 调用方法
print(dog.speak())  # 输出: Woof!
print(cat.speak())  # 输出: Meow!

二、类、对象和变量

        在面向对象编程(OOP)中,理解类、对象、和变量之间的关系对于编写高质量的代码是非常重要的。下面我们将更详细地讨论这些概念,以及它们是如何相互作用和支持编程模型的。

2.1 类(Class)

        类是一种复合数据类型,是对象的蓝图或模板。你可以将类视为一个创建对象的配方。类定义了一系列属性(变量)和方法(函数),这些属性和方法被该类的所有实例所共享。

  • 属性(Attributes):是绑定到类或类的实例上的变量。它们用于存储数据或状态。
  • 方法(Methods):是定义在类内部的函数,用于描述类的行为或与对象的交互方式。
class Car:wheels = 4  # 类变量,所有 Car 实例共享def __init__(self, make, model):self.make = make  # 实例变量self.model = model  # 实例变量def display_info(self):return f"{self.make} {self.model} has {Car.wheels} wheels"

        在这个例子中,Car 类定义了一个类变量 wheels 和两个实例变量 makemodel。方法 display_info 是一个实例方法,用来显示车辆的信息。

        在面向对象编程(OOP)中,类是构建和管理数据的主要方式。类通过其属性和方法定义了其实例的结构和行为。理解类的属性和方法对于有效使用面向对象编辑至关重要。下面我们将详细探讨类的属性和方法,并提供相应的代码示例。

2.2.1 类的属性(Class Attributes)

        类的属性是绑定到类本身的变量,它们定义了与类相关的数据。类的属性可以是实例变量或类变量:

  • 实例变量:这些变量是为类的每个实例单独存储的。每个对象可以拥有实例变量的独立副本。
  • 类变量:这些变量是由类的所有实例共享的。它们不属于任何一个实例,而是属于类本身。
class Dog:species = "Canine"  # 类变量,所有 Dog 实例共享def __init__(self, name, age):self.name = name  # 实例变量self.age = age    # 实例变量

        在这个例子中,species 是一个类变量,所有 Dog 类的实例都共享这个变量。而 nameage 是实例变量,每个 Dog 实例都有其自己的 nameage 值。

2.2.2 类的方法(Class Methods)

        方法是定义在类中的函数,用于执行与对象相关的操作。方法可以访问和修改对象的状态(实例变量)或类的状态(类变量)。方法分为几种类型:

  • 实例方法:最常见的方法类型,第一个参数通常是 self,它表示类的一个实例。
  • 类方法:使用装饰器 @classmethod 标记,第一个参数是 cls,它表示类本身。类方法可以访问和修改类变量。
  • 静态方法:使用装饰器 @staticmethod 标记,不接收 selfcls 参数。静态方法不能访问类或实例的任何属性,主要用于实现与类的状态无关的功能。
class Dog:species = "Canine"  # 类变量def __init__(self, name, age):self.name = name  # 实例变量self.age = age    # 实例变量def speak(self):  # 实例方法return f"{self.name} says Woof!"@classmethoddef get_species(cls):  # 类方法return cls.species@staticmethoddef info():  # 静态方法return "Dogs are domestic animals."

        在这个例子中,speak 是一个实例方法,它使用 self 来访问调用它的特定实例的属性。get_species 是一个类方法,它使用 cls 来访问类变量。info 是一个静态方法,它不访问任何实例或类属性。 

2.2 对象(Object)

        对象是类的实例。当类被实例化时,计算机内存中将创建一个对象。这个对象包含其类定义的所有属性,并且可以使用定义在类中的方法。

  • 实例化:创建类的实例的过程称为实例化,这通常通过调用类的构造方法(__init__ 方法)来完成。
my_car = Car("Toyota", "Corolla")  # 创建 Car 类的一个实例
print(my_car.display_info())  # 输出: Toyota Corolla has 4 wheels

        这里 my_car 指向的是 Car 类的一个对象,具有独立的 makemodel 属性值,但共享 wheels 属性。

2.3 变量(Variable)

        变量是编程中用来存储数据的基本单位。在面向对象编程中,变量可以有几种不同的形式:

  • 局部变量:在方法中定义,只在方法的作用域内可见。
  • 实例变量:通过使用 self 关键字在类的方法中定义,与特定的对象实例绑定。
  • 类变量:在类定义中创建,为类的所有实例共享。
class Car:wheels = 4  # 类变量def __init__(self, make, model):self.make = make  # 实例变量self.model = model  # 实例变量def update_wheels(self, number):Car.wheels = number  # 修改类变量# 修改 Car 类的 wheels 类变量
my_car = Car("Toyota", "Corolla")
another_car = Car("Honda", "Civic")
my_car.update_wheels(6)
print(another_car.wheels)  # 输出: 6,展示类变量是如何被所有实例共享的

三、总结

        面向对象编程(OOP)是一种将程序视为一系列交互的“对象”的编程范式,每个对象都是其特定类的实例。类定义了对象的结构(属性)和可以执行的操作(方法)。这种方法不仅有助于增强软件的可重用性、可维护性和灵活性,还通过封装、继承和多态等核心概念来简化复杂系统的开发和管理。利用类和对象,开发者可以更高效地编写模块化的代码,更容易地修改和扩展已有功能,从而应对日益复杂的软件开发需求。

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

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

相关文章

对类与对象的(二)补充

1.Date这样的构造函数 析构函数 拷贝构造 默认构造函数有三种 :全缺省的构造函数 无参的构造函数 和编译器默认生成的构造函数 class Date {pubilc:void Print() { } private://全缺省的int year1;int month1;int …

二叉树的广度优先搜索(层次遍历)

目录 定义 层序遍历的数据结构 实现过程简述 具体代码 定义 层序遍历就是从左到右一层一层地遍历二叉树。 层序遍历的数据结构 层序遍历需要借用一个辅助数据结构实现,由于队列具有先进先出的特性,符合一层一层遍历的逻辑,而栈先进后出…

PHP框架之Laravel框架

Laravel框架详解 Laravel,作为一款广受欢迎的PHP Web开发框架,以其优雅、简洁的语法和强大的功能特性,赢得了全球众多开发者的青睐。下面,我们将从Laravel的特点、应用案例以及具体的框架使用等方面进行详细解析。 一、Laravel框…

甲子光年专访天润融通CEO吴强:客户经营如何穿越低速周期?

作者|陈杨、编辑|栗子 社会的发展从来都是从交流和联络开始的。 从结绳记事到飞马传信,从电话电报到互联网,人类的联络方式一直都在随着时代的发展不断进步。只是传统社会通信受限于技术导致效率低下,对经济社会产生影…

LLaMA:挑战大模型Scaling Law的性能突破

实际问题 在大模型的研发中,通常会有下面一些需求: 计划训练一个10B的模型,想知道至少需要多大的数据?收集到了1T的数据,想知道能训练一个多大的模型?老板准备1个月后开发布会,给的资源是100张A100,应该用多少数据训多大的模型效果最好?老板对现在10B的模型不满意,想…

退市新规解读—财务类强制退市

一、退市风险警示:第一年触及相关指标 上市公司最近一个会计年度触及下列退市风险指标之一,公司股票或存托凭证被实施退市风险警示(*ST): 第1项 组合类财务指标 仅发行A股或B股,最近一个会计年度或追溯重述后最近一个会计年度 …

Leetcode 102.目标和

给定一个正整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums [2, 1] ,可以在 2 之前添加 ‘’ ,在 1 之前添加 ‘-’ &…

C#面:C#属性能在接口中声明吗?

在C#中,接口是一种定义了一组方法、属性和事件的类型。在接口中,只能声明方法、属性和事件的签名,而不能包含字段、构造函数或实现代码。因此,C#属性不能直接在接口中声明。 然而,你可以在接口中定义属性的签名&#…

VMware的具体使用

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 目录 一🌤️VMware的安…

用户登录错误次数太多锁定账号

当用户登录验证码错误次数太多时,需要限制用户在10分钟之内不能再次登录。 限制方案: 1.通过Redis ZSet key可以设置为用户名,value可以设置为UUID,score设置为当前时间戳 每次用户登录时,通过 rangeByScore 查询对…

Ubuntu22安装PyCharm

下载(社区版) 官网下载地址 解压 sudo tar -xzvf pycharm-community-2024.1.4.tar.gz 软件移动到指定目录下(根据不同版本修改) sudo mv pycharm-community-2024.1.4/ /usr/local/PyCharm/运行 cd /usr/local/PyCharm/pycha…

使用PEFT库进行ChatGLM3-6B模型的LORA高效微调

PEFT库进行ChatGLM3-6B模型LORA高效微调 LORA微调ChatGLM3-6B模型安装相关库使用ChatGLM3-6B模型GPU显存占用准备数据集加载模型加载数据集数据处理数据集处理配置LoRA配置训练超参数开始训练保存LoRA模型模型推理从新加载合并模型使用微调后的模型 LORA微调ChatGLM3-6B模型 本…

6 序列数据和文本的深度学习

6.1 使用文本数据 文本是常用的序列化数据类型之一。文本数据可以看作是一个字符序列或词的序列。对大多数问题,我们都将文本看作词序列。深度学习序列模型(如RNN及其变体)能够从文本数据中学习重要的模式。这些模式可以解决类似以下领域中的问题: 自然…

JVM专题十一:JVM 中的收集器一

上一篇JVM专题十:JVM中的垃圾回收机制专题中,我们主要介绍了Java的垃圾机制,包括垃圾回收基本概念,重点介绍了垃圾回收机制中自动内存管理与垃圾收集算法。如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回…

【开发者推荐】告别繁琐:一键解锁国产ETL新贵,Kettle的终结者

在数字化转型的今天,数据集成的重要性不言而喻。ETL工具作为数据管理的核心,对企业决策和运营至关重要。尽管Kettle广受欢迎,但国产ETL工具 TASKCTL 以其创新特性和卓越性能,为市场提供了新的选择。 TASKCTL概述 TASKCTL 是一款免…

wget之Win11中安装及使用

wget之Win11中安装及使用 文章目录 wget之Win11中安装及使用1. 下载2. 安装3. 配置环境变量4. 查看及使用1. 查看版本2. 帮助命令3. 基本使用 1. 下载 下载地址:https://eternallybored.org/misc/wget 选择对应的版本进行下载即可 2. 安装 将下载后的wget-1.21.4-w…

中医实训室:在传统针灸教学中的应用与创新

中医实训室是中医教育体系中的重要组成部分,尤其在传统针灸教学中,它扮演着无可替代的角色。这里是理论与实践的交汇点,是传统技艺与现代教育理念的碰撞之地。本文将探讨中医实训室在传统针灸教学中的应用与创新实践。 首先,实训室…

ResultSet的作用和类型

ResultSet的作用: ResultSet在Java中主要用于处理和操作数据库查询结果。它是一个接口,提供了一系列方法来访问和操作数据库查询得到的结果集。具体来说,ResultSet的作用包括: 获取查询结果:通过ResultSet可以获取数…

C++中指针的使用方法

基本概念 指针:一个变量,它存储另一个变量的内存地址。地址运算符 &:用于获取变量的内存地址。间接运算符 *:用于访问指针所指向的变量的值。 声明和初始化 int a 10; // 定义一个整数变量 int *p &a; // 定…

算法导论 总结索引 | 第四部分 第十六章:贪心算法

1、求解最优化问题的算法 通常需要经过一系列的步骤,在每个步骤都面临多种选择。对于许多最优化问题,使用动态规划算法求最优解有些杀鸡用牛刀了,可以使用更简单、更高效的算法 贪心算法(greedy algorithm)就是这样的算…