Python 从入门到实战22(类的定义、使用)

news2024/11/15 0:22:38

        我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。

上篇文章我们讨论了面向对象简单介绍相关知识。今天我们将学习一下类的定义、使用的相关知识。

1、类的定义

在python 中,类表示具有相同属性和方法的对象的集合。在使用之前需要先定义类。

定义类的语法:

class ClassName:

         ‘’’类的帮助信息’’’  #类文档字符串

         statement         #类体

参数说明:ClassName----指定类名,一般使用大写字母开头,若是由两个单词,第二个单词也大写

‘’’类的帮助信息’’’-----用于指定类的文档字符串,定义该字符串后,在创建类的对象时,输入类名和左侧的括号“(”后,将显示该信息

statement   -----类体,主要由变量、方法、属性等定义语句组成

举例说明:什么都不要的情况下,使用pass

#定义类举例,如鸟类
class Bird:
    """bird"""
   
pass

2、创建类的实例

定义类完成以后,并不会真正创建一个实例。创建实例方法:

ClassName(parameterlist)

说明:ClassName  -----是必选参数,用于指定具体的类,parameterlist  是可选参数。当创建的类没有__init__()方法时,或者__init__()方法只有self 一个参数时,parameterlist 可以省略。

接着上面的例子:

#定义类举例,如鸟类
class Bird:
    """bird"""
   
pass
wildBird = Bird() #创建实例
print(wildBird)

3、创建__init__()方法

在创建类后,通常会创建一个__init__()方法,类似于Java中的构造方法。每当创建一个实例,会自动执行__init__()方法。且__init__()方法必须包含self参数,并且必须是第一个参数。

#定义类举例,如鸟类
class Bird:
    """bird"""
   
def __init__(self):
        print("我是鸟类")
wildBird = Bird() #创建实例,就会执行类中的__init__()方法
print(wildBird)

举例__init__()方法中由self以外的参数

#定义类举例,如鸟类
class Bird:
    """bird"""
   
def __init__(self,wing,claw,feather):
        print("我是鸟类,我有以下特征:")
        print(wing)
        print(claw)
        print(feather)
wing_a = '我有一双翅膀'
claw_a = "我有两个爪子"
feather_a = "我有满身的羽毛"
wildBird = Bird(wing_a,claw_a,feather_a) #创建实例
print(wildBird)

输出参考:

4、创建类的成员并访问

类的成员主要由实例方法和数据成员组成。创建类的成员后,可以通过实例进行访问。

1)创建实例方法

实例方法就是在类中定义函数。同__init__()方法一样,实例方法第一个参数也是self.

语法: def functionName(self,parameterlist):

                          block

说明:functionName-----指定方法名称,一般使用小写字母开头

self -----必要参数,表示类的实例

parameterlist----self 以外的参数,多个使用,隔开

block ----方法体

注意:实例方法和pyhton 中普通函数主要区别是,函数实现某个独立的功能。而实例方法是实现类中的一个行为,是类的一部分。

访问类中实例方法:instanceName. functionName(parameterlist)

instanceName -----为类的实例名称

举例说明:如接上面的例子,增加飞行的实例方法

#定义类举例,如鸟类
class Bird:
    """bird"""
   
def __init__(self,wing,claw,feather):
        print("我是鸟类,我有以下特征:")
        print(wing)
        print(claw)
        print(feather)
    def bird_fly(self,state):
        print(state)

wing_a = '我有一双翅膀'
claw_a = "我有两个爪子"
feather_a = "我有满身的羽毛"
wildBird = Bird(wing_a,claw_a,feather_a) #创建实例
wildBird.bird_fly("我正在上升的飞行状态!")

输出参考:

2)创建数据成员并访问

 数据成员是指在类中定义的变量,即属性。根据定义位置,又可以分为类属性和实例属性。

类属性:定义在类中,但是在函数体外的属性。类属性可以在类的所有实例之间共享值。

类属性可以通过类名称或者实例访问。

举例说明:

#定义类举例,如鸟类
class Bird:
    """bird"""
   
wing_a = '我有一双翅膀'
    claw_a = "我有两个爪子"
    feather_a = "我有满身的羽毛"
    def __init__(self):
        print("我是鸟类,我有以下特征:")
        print(Bird.wing_a)#通过类名称访问类属性
        print(Bird.claw_a)
        print(Bird.feather_a)

    def bird_fly(self,state):
        print(state)
wildBird = Bird() #创建实例
wildBird.bird_fly("我正在上升的飞行状态!")

另外,类的实例去访问类属性:

#定义类举例,如鸟类
class Bird:
    """bird"""
   
wing_a = '我有一双翅膀'
    claw_a = "我有两个爪子"
    feather_a = "我有满身的羽毛"
    def __init__(self):
        print("我是鸟类,我有以下特征:")
        print(Bird.wing_a)
        print(Bird.claw_a)
        print(Bird.feather_a)
    def bird_fly(self,state):
        print(state)
wildBird = Bird() #创建实例
print(wildBird.wing_a) #类的实例去访问类属性
wildBird.bird_fly("我正在上升的飞行状态!")

输出参考:

实例属性:是指定义在类的方法中的属性,只作用于当前实例中。

我们总结一下类属性和实例属性的主要区别:

类属性属于类本身,而实例属性属于类的每个实例。

所有类的实例共享相同的类属性,而每个实例都有自己独立的实例属性。

类属性通常用于存储与类相关的常量或共享状态,而实例属性通常用于存储每个实例特有的数据。

举例说明:

#定义类举例,如鸟类
class Bird:
    """bird"""
   
def __init__(self):
        self.wing = '我有一双翅膀'#实例属性
        self.claw = '我有两个爪子'#实例属性
        self.feather = '我有满身的羽毛'#实例属性
        print("我是鸟类,我有以下特征:")
        print(self.wing)
        print(self.claw)
        print(self.feather)
    def bird_fly(self,state):
        print(state)
wildBird = Bird() #创建实例
print(wildBird.wing)
wildBird.bird_fly("我正在上升的飞行状态!")

输出结果:

5、访问限制

在类的内部可以定义属性和方法,而在类的外部则可以直接调用属性或者方法来操作数据,从而隐藏了类内部的复杂逻辑。但是,在python中没有对属性和方法的访问权限进行限制。

在Python中,可以使用双下划线作为前缀来定义私有变量或者私有方法。私有变量或方法只能在类的内部访问,外部不能直接访问。

如__foo:双下划线表示private(私有)类型的成员,只允许定义该方法的类本身对其进行访问,而不允许通过类的实例对其进行访问,可以通过“类的实例名._类名__xxx“方式来访问

例如:

#定义类举例,如鸟类
class Bird:
    """bird"""
   
__tail = "鸟儿的尾巴一般不长"
    def __init__(self):
        print("__init__():",Bird.__tail)#可以通过类本身访问

wildBird = Bird() #创建实例
print("加入类名访问私有成员:",wildBird._Bird__tail)#通过“类的实例名._类名__xxx“方式来访问
print("直接访问:",wildBird.__tail)#直接通过实例访问报错

输出参考:

今天先写学习到这里了,每天进步一点点。今天也要加油啊!

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

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

相关文章

828华为云征文 | 深度评测,华为云Flexus X实例在Sysbench性能测试中的亮眼表现

前言 本文章评测了华为云Flexus X实例在Sysbench性能测试中的亮眼表现。Flexus X凭借其新一代处理器和智能算力技术,在CPU、内存、磁盘I/O及网络性能上均展现出了卓越的能力。通过Sysbench的详尽测试,Flexus X实例在多核计算能力、内存吞吐量、磁盘响应速…

CSS传统布局方法(补充)——WEB开发系列37

开发技术不断演进,布局方式也经历了多个阶段的变革。从最初的基于表格布局到 CSS 的浮动布局,再到今天的弹性盒(Flexbox)与 CSS Grid 网格布局,每一种布局方式都有其独特的背景和解决特定问题的优势。 一、CSS Grid 出…

neo4j安装启动教程+对应的jdk配置

参考这位博主的视频教程:neo4j社区windows版下载 一、官网下载neo4j的安装包 (1)官网下载页面 (2)上一步 【download】之后,会自动下载,如果没有,点击【here】 这里可以看到一行字…

IDEA Project不显示/缺失文件

问题:侧边栏project 模式下缺少部分文件 先点close project 打开项目所在目录,删除目录下的.idea文件夹 重新open project打开这个项目即可解决

stm32单片机个人学习笔记4(GPIO输入)

前言 本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 STM32入门教程-2023版 细…

JavaDS —— 图

图的概念 图是由顶点集合以及顶点之间的关系组成的一种数据结构:G (V,E) 其中 V 表示的是顶点集合 : V { x | x 属于某个数据对象集} 是有穷非空集合 E 叫做边的集合 : E {(x, y) | x, y 属于 V} 或者 …

深度长文:揭开C/C++三目运算符的全部秘密,助你写出更优雅的代码(下)

在上篇文章中,我们深入探讨了三目运算符的基础语法、与if-else的对比以及使用中的常见误区。通过这些知识,你已经掌握了如何在代码中使用三目运算符来简化条件判断。 然而,三目运算符在C和C中的应用并不仅限于简单的条件选择。接下来&#x…

尚品汇-秒杀下单实现-页面轮询查询订单状态(五十三)

目录: (1)整合秒杀业务 (2)秒杀下单 (3)秒杀下单监听 (4)页面轮询接口 (1)整合秒杀业务 秒杀的主要目的就是获取一个下单资格,拥…

《深度学习》—— 神经网络模型对手写数字的识别

神经网络模型对手写数字的识别 import torch from torch import nn # 导入神经网络模块 from torch.utils.data import DataLoader # 数据包管理工具,打包数据, from torchvision import datasets # 封装了很多与图像相关的模型,数据集 from torchvi…

codetop字符串刷题,刷穿地心!!不再畏惧!!暴打面试官!!

主要供自己回顾与复习,题源codetop标签字符串近半年,会不断更新 1.有效的括号字符串2.括号生成3.最长单词4.字符串转换整数(atoi)5.整数转罗马数字6.罗马数字转整数7.比较版本号8.最长公共前缀9.面试题17.15.最长单词10.验证IP地址11.面试题01.06.字符串…

介绍一下常用的激活函数?

常用的激活函数 Sigmoid函数Tanh函数ReLU函数Leaky ReLU函数Softmax函数 Sigmoid函数 特点: 将任意实数映射到(0,1)区间内,输出值可以作为概率来解释。 函数平滑且易于求导,但其导数在两端趋近于0,即存在梯度消失问题。 输出值不…

CWFED:自然灾害检测数据集(猫脸码客 第192期)

Cyclone Wildfire Flood Earthquake Database 在自然灾害频发的今天,准确、及时地获取并分析相关数据对于灾害预防、预警及响应至关重要。为此,Cyclone Wildfire Flood Earthquake Database(以下简称CWFE Database)应运而生&…

计算机毕业设计 农场投入品运营管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

gcc升级(含命令行升级、手动升级两种方式)

gcc升级 1.yum源替换1.1 备份原始repo配置文件1.2 重新配置CentOS-Base.reporepo文件1.3 清除缓存并重新创建 2. gcc安装3.命令行升级gcc4.手动升级4.1 安装包下载4.2 解压4.3 gcc升级4.3.1 依赖拉取4.3.2 gmp安装4.3.3 mpfr安装4.3.4 mpc安装4.3.5 gcc编译、安装 4.4 gcc命令配…

Linux环境变量进程地址空间

目录 一、初步认识环境变量 1.1常见的环境变量 1.2环境变量的基本概念 二、命令行参数 2.1通过命令行参数获取环境变量 2.2本地变量和内建命令 2.3环境变量的获取 三、进程地址空间 3.1进程(虚拟)地址空间的引入 3.2进程地址空间的布局和理解 …

简易CPU设计入门:本CPU项目的指令格式

在这一节里面,主要是理论知识,基本上不讲代码。不过,本项目的代码包,大家还是需要下载的。 本项目的代码包的下载方法,参考下面的链接所指示的文章。 下载本项目代码 本节,其实是要讲本项目CPU的指令集。…

大模型蒸馏技术

一篇题为《The Mamba in the Llama: Distilling and Accelerating Hybrid Models》的论文证明:通过重用注意力层的权重,大型 transformer 可以被蒸馏成大型混合线性 RNN,只需最少的额外计算,同时可保留其大部分生成质量。 先来说…

Python学习——【2.1】if语句相关语法

文章目录 【2.1】if语句相关一、布尔类型和比较运算符(一)布尔类型(二)比较运算符 二、if语句的基本格式※、练习 三、if-else组合判断语句※、练习 四、if-elif-else多条件判断语句※、练习 五、判断语句的嵌套※、实战案例 【2.…

AlexNet项目图片分类通用模型代码

目录 一:建立AlexNet模型(在model文件中写) 1.构造5层卷积层 2.构造3层神经网络层 3.forward函数 4.模型最终代码 二:训练数据(在train中写) 1.读出数据 2.训练 3. 测试模型更新参数 4.完整的训练…

Datawhile 组队学习Tiny-universe Task01

Task01:LLama3模型讲解 仓库链接:GitHub - datawhalechina/tiny-universe: 《大模型白盒子构建指南》:一个全手搓的Tiny-Universe 参考博客:LLaMA的解读与其微调(含LLaMA 2):Alpaca-LoRA/Vicuna/BELLE/中文LLaMA/姜子…