【100天精通python】Day11:面向对象编程_类的定义和使用

news2025/4/5 20:49:45

目录

1. 面向对象的程序设计概述

 2 类的定义和使用

2.1 定义类:

2.2 创建对象实例:

2.3 创建_init_() 方法

2.4 创建类的成员并访问

2.5 访问限制

2.5.1 公开访问(Public Access):

2.5.2 私有访问(Private Access):

2.5.3 受保护访问(Protected Access):

1. 面向对象的程序设计概述

        面向对象的程序设计(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和行为封装在一个称为对象的单元中,通过定义类和实例化对象来实现代码的组织和复用。

        在面向对象编程中,程序被组织成一系列相互关联的对象,每个对象都有自己的状态(属性)和行为(方法)。类是对象的蓝图,用于定义对象的结构和行为。

        Python是一种支持面向对象编程的高级编程语言,它提供了类、对象、继承、封装、多态等面向对象的特性。下面是一些常用的面向对象编程的概念:

  1. 类(Class):类是对象的模板或蓝图,用于定义对象的属性和方法。通过class关键字来创建类。

  2. 对象(Object):对象是类的一个实例,它具有类定义的属性和方法。通过实例化类来创建对象。

  3. 属性(Attribute):属性是对象的状态,它用于存储数据。可以通过点操作符(.)来访问对象的属性。

  4. 方法(Method):方法是对象的行为,它是类中定义的函数。方法与函数的区别在于,方法必须在类内部定义,并且第一个参数通常是self,表示该方法属于对象本身。

  5. 继承(Inheritance):继承是一种创建新类的方式,新类继承了现有类的属性和方法。通过继承,可以实现代码的复用和层次化组织。

  6. 封装(Encapsulation):封装是将数据和方法封装在一个对象中,隐藏对象的实现细节,只对外部提供接口。

  7. 多态(Polymorphism):多态是指不同类的对象可以对相同的方法做出不同的响应,从而提高代码的灵活性和可扩展性。

面向对象编程可以使代码更加模块化、易于理解和维护,是现代编程中广泛使用的编程范式之一。在Python中,面向对象编程可以应用于各种场景,包括创建图形界面、实现抽象数据类型、构建复杂系统等。

 2 类的定义和使用

        在面向对象编程中,类是一种重要的概念,它用于定义对象的结构和行为。类是对象的蓝图或模板,通过类可以创建多个具有相同属性和方法的对象实例。类的作用主要包括:

  1. 封装数据和行为:类可以将数据(属性)和行为(方法)封装在一起,隐藏对象的内部实现细节,只对外部提供接口。这样可以增加代码的安全性和可维护性。

  2. 代码复用:通过定义类,可以实现代码的复用。在一个类中定义的属性和方法可以在多个对象实例中共享,避免重复编写相同的代码。

  3. 抽象数据类型:类可以用于定义抽象数据类型,将数据和相关操作封装在一起,形成更高层次的抽象。

类的定义和使用分为以下几个步骤:

2.1 定义类:

        使用class关键字定义一个类,并在类的内部定义类的属性和方法。

class MyClass:
    # 类的属性
    attr1 = 0
    attr2 = "Hello"

    # 类的方法
    def method1(self):
        return "Method 1"

    def method2(self):
        return "Method 2"

2.2 创建对象实例:

        使用类名后跟一对括号来创建类的对象实例。

obj = MyClass()

2.3 创建_init_() 方法

        在Python中,__init__()方法是一个特殊的方法,也被称为构造函数。它在创建类的对象实例时被调用,用于初始化对象的属性。在__init__()方法中,你可以指定对象的初始状态,为对象设置默认值,以及执行其他必要的初始化操作。

下面是一个示例,演示如何在类中创建__init__()方法:

class MyClass:
    # 初始化方法
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2

    # 其他方法
    def method1(self):
        return "Method 1"

    def method2(self):
        return "Method 2"

# 创建对象实例并传递参数
obj = MyClass(10, "Hello")

# 访问对象的属性和调用方法
print(obj.attr1)    # 输出: 10
print(obj.attr2)    # 输出: Hello

print(obj.method1())    # 输出: Method 1
print(obj.method2())    # 输出: Method 2

        在上面的示例中,我们在MyClass类中定义了__init__()方法,该方法接收两个参数attr1attr2。在创建类的对象实例时,我们可以通过传递参数来初始化对象的属性。在__init__()方法内部,我们使用self.attr1self.attr2来创建对象的属性,并将传入的参数赋值给它们。

        请注意,self是一个特殊的参数,它代表类的实例本身,用于引用对象的属性和方法。在__init__()方法中,需要使用self来设置对象的属性,以便这些属性可以在整个类的其他方法中使用。

        通过使用__init__()方法,我们可以确保在创建对象实例时,对象的属性得到正确的初始化,避免了在创建对象后还需要手动设置属性的麻烦。这使得代码更加简洁和易于维护。

2.4 创建类的成员并访问

在Python中,类的成员可以包括属性和方法。属性是类的数据成员,用于存储对象的状态信息,而方法是类的函数成员,用于定义对象的行为。

下面是一个示例,演示如何在类中创建属性和方法,并如何访问它们:

class MyClass:
    # 属性定义
    attr1 = "Hello"
    attr2 = 42

    # 方法定义
    def method1(self):
        return "Method 1"

    def method2(self):
        return "Method 2"

# 创建对象实例
obj = MyClass()

# 访问属性
print(obj.attr1)    # 输出: Hello
print(obj.attr2)    # 输出: 42

# 调用方法
print(obj.method1())    # 输出: Method 1
print(obj.method2())    # 输出: Method 2

         在上面的示例中,我们在MyClass类中定义了两个属性attr1attr2,以及两个方法method1()method2()。在创建类的对象实例后,我们可以使用点运算符来访问对象的属性和调用对象的方法。

        注意,在方法的定义中,我们使用了特殊参数self,它代表类的实例本身,用于引用对象的属性和方法。在访问属性和调用方法时,我们需要使用self来指定对象的上下文。

如果想要在类的外部访问类的成员,可以通过对象实例来访问。例如,obj.attr1用于访问attr1属性的值,obj.method1()用于调用method1()方法。

        需要注意的是,类的属性和方法是类的所有实例共享的。这意味着,无论创建多少个对象实例,它们都共享相同的属性和方法。

2.5 访问限制

        在Python中,可以使用访问限制来控制类的属性和方法是否可以从类的外部进行访问。通过访问限制,可以确保类的内部状态和行为不会被意外修改或访问,提高代码的封装性和安全性。

在Python中,有三种访问限制方式:

2.5.1 公开访问(Public Access):

        默认情况下,类的属性和方法都是公开的,可以从类的外部直接访问。例如,前面示例中的attr1method1()就是公开访问的。

2.5.2 私有访问(Private Access):

        在属性或方法的名称前面加上两个下划线__,可以将其设置为私有成员,表示这些成员只能在类的内部访问,不能从类的外部直接访问。例如:

class MyClass:
    def __init__(self):
        self.__private_attr = "Private Attribute"

    def __private_method(self):
        return "Private Method"

 在上面的例子中,__private_attr__private_method()都是私有成员,只能在类的内部访问,无法从类的外部直接访问。

2.5.3 受保护访问(Protected Access):

        在属性或方法的名称前面加上一个下划线_,可以将其设置为受保护的成员,表示这些成员可以在类的内部和子类中访问,但在类的外部不能直接访问。例如:

class MyBaseClass:
    def __init__(self):
        self._protected_attr = "Protected Attribute"

    def _protected_method(self):
        return "Protected Method"

class MySubClass(MyBaseClass):
    def print_protected(self):
        print(self._protected_attr)
        print(self._protected_method())

在上面的例子中,_protected_attr_protected_method()都是受保护成员,在MyBaseClass中定义,但在MySubClass中可以通过继承来访问。

需要注意的是,虽然Python中提供了访问限制的方式,但实际上并没有严格的强制规定。私有成员和受保护成员仍然可以通过特定的方式从类的外部进行访问,但这是一种约定俗成的行为,建议开发者遵循访问限制的约定,以保证代码的封装性和安全性。 

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

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

相关文章

深入学习 Redis - 深挖经典数据类型之 set

目录 前言 一、Set 类型 1.1、操作命令 sadd / smembers(添加) sismember(判断存在) scard(获取元素个数) spop(删除元素) smove(移动) srem&#x…

剑指27 二叉树的镜像 28.对称的二叉树 26.树的子结构

方法1&#xff1a;队列迭代 方法2&#xff1a;递归 队列迭代&#xff1a; class Solution { public:TreeNode* mirrorTree(TreeNode* root) {queue<TreeNode*> q;if(rootNULL) return root;q.push(root);while(!q.empty()){TreeNode *curq.front();if(!cur) continue;//…

Golang并发控制

开发 go 程序的时候&#xff0c;时常需要使用 goroutine 并发处理任务&#xff0c;有时候这些 goroutine 是相互独立的&#xff0c;需要保证并发的数据安全性&#xff0c;也有的时候&#xff0c;goroutine 之间要进行同步与通信&#xff0c;主 goroutine 需要控制它所属的子gor…

MySQL_2.3【高级查询】超详细讲解

1. distinct关键字 distinct # 在MySQL中&#xff0c;DISTINCT关键字用于消除重复记录&#xff0c;并返回唯一的记录集。 # DISTINCT关键字可以用在SELECT语句的开头&#xff0c;并在查询结果中显示唯一的行。 # 语法如下&#xff1a; select distinct 列1, ... , 列n from t…

vcomp100.dll丢失怎样修复?总结三个简单的修复方法

最近我遇到了一个问题&#xff0c;我的电脑上出现了vcomp100.dll文件丢失的错误。这个错误导致我无法运行一些使用了Microsoft Visual C编写的程序。当我第一次遇到这个问题时&#xff0c;我感到非常困惑和沮丧&#xff0c;因为我不知道如何解决这个问题。 然后&#xff0c;我开…

服务器操作手册——Slurm常用命令

文章目录 引言正文Slurm集群、节点、分区介绍Salloc申请节点并进入查看已经申请的节点终止作业查看集群情况退出节点具体运行问题无法联网问题安装的包找不到 引言 实验室的服务器的操作指令&#xff0c;之前同学写的不够详细&#xff0c;或者说有点乱&#xff0c;这里做一个简…

C++(类与对象)详解 - 1

C&#xff08;类与对象&#xff09;详解 - 1 1.面向过程和面向对象初步认识2.类的引入3.类的定义4.类的访问限定符及封装4.1 访问限定符4.2 封装 5.类的作用域6.类的实例化7.类的对象大小的计算7.1 如何计算类对象的大小7.2 类对象的存储方式7.3 结构体内存对齐规则 8.类成员函…

项目4渗透全过程

网络拓扑图 任务从拓扑图中可以其中一台web服务器可以进行与kali的直接通信。该web服务器是双重网段。也就是拿到该服务器就可以在进行下一步内网操作了。 2008配置&#xff1a; 护卫神主机系统密码&#xff1a;!#Qwe123. sqlserver2008密码&#xff1a;!#a123… 一、信息收…

遥感目标检测(3)-DAL(Dynamic Anchor Learning for Object Detection)

目录 一、概述 二、背景 三、建议 1、旋转RetinaNet 2、动态锚框分布 3、匹配敏感损失 四、实验 一、概述 由于选择正样本锚框进行回归&#xff0c;不一定能够定位真实的GT&#xff0c;而部分负样本回归甚至可以回归到真实的GT&#xff0c;说明相当多的负样本锚框有着准…

FreeRTOS 初识

从这节开始学习FreeRTOS操作系统。 FreeRTOS 介绍 Q: 什么是 FreeRTOS &#xff1f; A: Free即免费的&#xff0c;RTOS的全称是Real time operating system&#xff0c;中文就是实时操作系统。 注意&#xff1a;RTOS不是指某一个确定的系统&#xff0c;而是指一类操作系统。比…

【Java 并发编程】读写锁 ReentrantReadWriteLock StampLock 详解

读写锁 ReentrantReadWriteLock & StampLock 详解 1. 读写锁1.1 并发场景1.2 什么是读写锁1.3 思考如何自己实现一把锁&#xff1f; 2. ReentrantReadWriteLock2.1 ReentrantReadWriteLock 概述及其基本结构2.2 ReentrantReadWriteLock 的特点2.2.1 读写锁的互斥关系2.2.2 …

springboot实现qq邮箱发送邮件或者验证码

首先我先去qq邮箱或者网易邮箱开通POP3/IMAP/SMTP/Exchange/CardDAV 服务 它在左上角的设置——账户——往下滑就可以找到——然后点击开通 开通后就会得到一串授权码。如下图 接下来直接编写代码 首先我没导入依赖 <!-- 这个是邮箱验证--> <dependency> <group…

IDEA+java+spring+hibernate+jquery+mysql后台管理系统

IDEA javaspringhibernatejquerymysql后台管理系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.修改密码3.我的内容4.我的操作日志5. 我的登陆日志6. 我的登陆授权7. 内容管理8.标签管理9. 搜索词管理10.分类管理11.分类类型12.标签分类13.用户管理14.部门管理15.角色…

elasticsearch在统计存储用量方面的应用

存储介绍 对象存储在现在的项目中应用非常广泛&#xff0c;主要用来存储图片、视频、音频、文件等静态资源&#xff0c;所有云服务厂商基本上都有对象存储&#xff0c;对象存储收费一般 按每月每GB收费&#xff0c;如七牛的0.098 元/GB/月&#xff0c;阿里的0.12元/GB/月。比如…

k8s网络之(一)如何调试容器网络 nsenter

① 背景 ② 三种解决策略 最常见&#xff1a; 镜像为了保持精简化,没有安装网络命令,缺少必要的基础网络软件 ③ pod_id和container_id关系 细节&#xff1a; 一个pod内可以有多个容器,意味者可以有多个容器id说明&#xff1a; docker ps 默认容器id只有前12位案例&#x…

如何理解自动化

目录 1.如何定义自动化 2.自动化给人类带来的福利 3.如何学习自动化 4.自动化潜在的危害 1.如何定义自动化 自动化是指利用计算机、机械、电子技术和控制系统等现代科学技术手段&#xff0c;对各种工业、商业、农业和日常生活中的操作和过程进行自动控制和执行的过程。它旨在…

《博客继续更新说明》

目录 1.博客停更原因2.考研和比赛3.工作和博客题外话 1.博客停更原因 自2022.6.20起&#xff0c;本人CSDN博客断更了&#xff0c;故很多粉丝的私信没有看到&#xff0c;非常抱歉哈&#xff0c;简单叙说下这一年经历&#xff0c;当时大三后期原本想法是直接找嵌入式实习的&#…

怎样用IDEA社区版以及企业版创建spring boot项目?

Spring 的诞生是为了简化 Java 程序的开发的&#xff0c;而 Spring Boot 的诞生是为了简化 Spring 程序开发的 。 Spring Boot 翻译一下就是 Spring 脚手架&#xff0c;什么是脚手架呢&#xff1f;如下图所示&#xff1a; 盖房子的这个架子就是脚手架&#xff0c;脚手架…

脑电信号处理与特征提取——三. 脑电实验设计的原理与实例(古若雷)

三、脑电实验设计的原理与实例 被试间设计的实验结果也有可能是人员不同造成的&#xff0c;所以建议被试内设计。

【力扣每日一题】2023.7.22 柠檬水找零

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码运行结果&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 这是一道模拟题&#xff0c;我们贩卖五美元&#xff08;忒贵了&#xff09;一杯的柠檬水&#xff0c;然后只收取5,10,20面值的钞票…