iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中类的定义和使用细讲
  • 937
分享到

Python中类的定义和使用细讲

python面向对象编程属性和方法 2023-09-29 19:09:33 937人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

文章目录 前言一、定义类二、创建类的实例三、创建 _ _ init _ _() 方法四、创建类的成员并访问1. 创建实例方法并访问2. 创建数据成员并访问 五、访问限制 前言   在

文章目录


前言

  在 python 中,类表示具有相同属性方法对象集合。在使用类时,需要先定义类,然后再创建类的实例通过类的实例就可以访问类中的属性和方法了。


一、定义类

  在 Python 中,类的定义使用 class 关键字来实现,语法如下:

class ClassName:    '''类的帮助信息'''  # 类文档字符串    statement          # 类体 

参数说明

  • ClassName:用于指定类名,一般使用大写字母开头,如果类名中包括两个单词,第二个单词的首字母也大写,这种命名方法也称为 “驼峰式命名法”,这是惯例。当然,也可根据自己的习惯命名,但是一般推荐按照惯例来命名。
  • ‘’‘类的帮助信息’‘’:用于指定类的文档字符串,定义该字符串后,在创建类的对象时,输入类名和左侧的括号 “(” 后,将显示该信息。
  • statement:类体,主要由类变量(或类成员)、方法和属性等定义语句组成。如果在定义类时,没想好类的具体功能,也可以在类体中直接使用 pass 语句代替。

  例如,下面以鸟为例声明一个类,代码如下:

class Bird:    """鸟类"""    pass

二、创建类的实例

  定义完类后,并不会真正创建一个实例。这有点像一个汽车的设计图。设计图可以告诉你汽车看上去什么样,但设计图本身不是一个汽车。你不能开走它,它只能用来建造真正的汽车,而且可以使用它制造很多辆汽车。那么如何创建实例呢?
  class 语句本身并不创建该类的任何实例。所以在类定义完成以后,可以创建类的实例,即实例化该类的对象。创建类的实例的语法如下:

ClassName(parameterlist)

  其中,ClassName 是必选参数,用于指定具体的类;parameterlist 是可选参数,当创建一个类时,没有创建 _ _ init _ _() 方法(该方法将在下面介绍),或者 _ _ init _ _() 方法只有一个 self 参数时,parameterlist 参数可以省略。
  例如,创建上面定义的鸟类的实例,可以使用下图所示的代码:

在这里插入图片描述


三、创建 _ _ init _ _() 方法

  在创建类后,可以手动创建一个 _ _ init _ _ () 方法。该方法是一个特殊的方法。每当创建一个类的新实例时,Python 都会自动执行它。_ _ init _ _() 方法必须包含一个 self 参数,并且必须是第一个参数。self 参数是一个指向实例本身的引用,用于访问类中的属性和方法。在方法调用时会自动传递实际参数 self,因此当 _ _ init _ _() 方法只有一个参数时,在创建类的实例时,就不需要指定实际参数了。
说明在 _ _ init _ _() 方法的名称中,开头和结尾处是两个下划线(中间没有空格),这是一种约定,旨在区分 Python 默认方法和普通方法。
  例如,下面仍然以鸟为例声明一个类,并且创建 _ _ init _ _() 方法,代码如下图所示:

在这里插入图片描述

  从上面的代码及运行结果可以看出,在创建鸟类的实例时,虽然没有为 _ _ init _ _() 方法指定参数,但是该方法会自动执行。

注意:在创建 _ _ init _ _() 方法时,一定要在括号中添加 self,否则会报错如下图所示。

在这里插入图片描述

  在 _ _ init _ _() 方法中,除了 self 参数外,还可以自定义一些参数,参数间使用逗号 “,” 进行分隔。例如,下面的代码将在创建 _ _ init _ _() 方法时,再指定 2 个参数,分别是 color,shape。

class Apple:  # 创建一个苹果类    """苹果类"""    def __init__(self, color, shape):  # 构造方法        print('我是苹果类,我有以下特征:')        print(color)  # 输出颜色特征        print(shape)  # 输出形状特征color_1 = '颜色是红色的'  # 颜色特征shape_1 = '形状是球形的'  # 形状特征red_apple = Apple(color_1, shape_1)  # 创建苹果类的实例

  执行上面代码后,结果如下:

我是苹果类,我有以下特征:颜色是红色的形状是球形的

四、创建类的成员并访问

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

1. 创建实例方法并访问

  所谓实例方法是指在类中定义的函数该函数是一种在类的实例上操作的函数。同 _ _ init _ _() 方法一样,实例方法的第一个参数必须是 self,并且必须包含一个 self 参数。创建实例方法的语法格式如下:

def functionName(self, parameterlist):block

参数说明

  • functionName:用于指定方法名,一般使用小写字母开头
  • self:必要参数,表示类的实例,其名称可以是 self 以外的单词,使用 self 只是一个惯例而已。
  • parameterlist:用于指定除 self 参数以外的参数,各参数间使用逗号 “,” 进行分隔。
  • block:方法体,实现的具体功能。

说明实例方法和 Python 中的函数的主要区别就是,函数实现的是某个独立的功能,而实例方法是实现类中的一个行为,是类的一部分。

  实例方法创建完成后,可以通过类的实例名称 (.)操作符进行访问,语法格式如下:

instanceName.functionName(parameterlist)

参数说明

  • instanceName:为类的实例名称。
  • functionName:为要调用的方法名称。
  • parameterlist:表示为方法指定对应的实际参数,其值的个数与创建实例方法中 parameterlist 的个数相同。
  • block:方法体,实现的具体功能。

  例如,创建一个人类,并定义一个构造方法,然后再定义一个实例方法 run(),该方法有两个参数,一个是 self,另一个是 speed,最后再创建人类的实例,并调用实例方法 run(),代码如下:

class People:  # 创建一个人类    """人类"""    def __init__(self, eye, mouth):  # 构造方法        print('我是人类,我有以下特征:')        print(eye)  # 输出眼睛特征        print(mouth) # 输出嘴巴特征    def run(self, speed):  # 定义跑的方法        print(speed)eye_1 = '我有两只眼睛'  # 眼睛特征mouth_1 = '我有一个嘴巴'  # 嘴巴特征man = People(eye_1, mouth_1)  # 创建人类的实例man.run('我跑起来非常快')  # 调用实例方法

  运行上面代码后,结果如下:

我是人类,我有以下特征:我有两只眼睛我有一个嘴巴我跑起来非常快

2. 创建数据成员并访问

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

  • 类属性

  类属性是指定义在类中,并且在函数体外的属性。类属性可以在类的所有实例之间共享值,也就是在所有实例化的对象中公用
说明类属性可以通过类名称或者实例名访问。

  例如,定义一个人类 People,在该类中定义 2 个类属性,代码如下:

class People:  # 创建一个人类    """人类"""    eye = '有两只眼睛'    mouth = '有一个嘴巴'    def __init__(self):  # 构造方法        print('我属于人类,我有以下特征:')        print(People.eye)  # 输出眼睛特征        print(People.mouth) # 输出嘴巴特征man = People()  # 实例化一个人类的对象

  运行上面代码后,结果显示如下:

我属于人类,我有以下特征:有两只眼睛有一个嘴巴

  在 Python 中除了可以通过类名称访问类属性,还可以动态地为类和对象添加属性。例如,在上面 People 类的基础上添加一个 arm 属性,并通过类的实例访问该属性,可以在上面代码的后面再添加以下代码:

People.arm = '有两个胳膊'print(man.arm)

  运行代码后,结果显示如下:

我属于人类,我有以下特征:有两只眼睛有一个嘴巴有两个胳膊

说明除了可以动态地为类和对象添加属性,也可以修改类属性。修改结果将作用于该类的所有实例。

  • 实例属性

  实例属性是指定义在类的方法中的属性,只作用于当前实例中。例如,定义一个人类 People,在该类的 _ _ init _ _() 方法中定义 2 个实例属性,用于记录人类的特征,代码如下:

class People:  # 创建一个人类    """人类"""    def __init__(self):  # 构造方法        self.eye = '有两只眼睛'        self.mouth = '有一个嘴巴'        print('我属于人类,我有以下特征:')        print(self.eye)  # 输出眼睛特征        print(self.mouth) # 输出嘴巴特征man = People()  # 实例化一个人类的对象

  上面代码运行后,显示以下结果:

我属于人类,我有以下特征:有两只眼睛有一个嘴巴

说明实例属性只能通过实例名访问。如果通过类名访问实例属性,将抛出如下图所示异常。

在这里插入图片描述

  对于实例属性也可以通过实例名称修改,与类属性不同,通过实例名称修改实例属性后,并不影响该类的另一个实例中相应的实例属性的值。例如,定义一个人类,并在 _ _ init _ _() 方法中定义一个实例属性,然后创建两个 People 类的实例,并且修改第一个实例的实例属性,最后分别输出实例 1 和实例 2 的实例属性,代码如下:

class People:  # 创建一个人类    """人类"""    def __init__(self):  # 构造方法        self.eye = '有两只眼睛'        print('我属于人类,我有以下特征:')        print(self.eye)  # 输出眼睛特征man_1 = People()  # 创建People类的实例1man_2 = People()  # 创建People类的实例2man_1.eye = '有两只圆圆的大眼睛'  # 修改实例属性print('man_1的eye属性:', man_1.eye)print('man_2的eye属性:', man_2.eye)

  运行上面代码后,将显示以下内容:

我属于人类,我有以下特征:有两只眼睛我属于人类,我有以下特征:有两只眼睛man_1的eye属性: 有两只圆圆的大眼睛man_2的eye属性: 有两只眼睛

五、访问限制

  在类的内部可以定义属性和方法,而在类的外部则可以直接调用属性或方法来操作数据,从而隐藏了类内部的复杂逻辑。但是 Python 并没有对属性和方法的访问权限进行限制。为了保证类内部的某些属性或方法不被外部所访问,可以在属性或方法名前面添加双下划线(_ _ eye)或首尾添加双下划线(_ _ eye _ _)从而限制访问权限。其中,双下划线、首尾双下划线的作用如下:

  1. 首尾双下划线表示定义特殊方法,一般是系统定义名字,如 _ _ init _ _()
  2. 双下划线表示 private(私有)类型的成员只允许定义该方法的类本身进行访问,而且也不能通过类的实例进行访问,但是可以通过 “类的实例名._ 类名 _ _ xxx” 方式访问。

  例如,创建一个 People 类,定义私有属性 _ _ eye,并使用 _ _ init _ _() 方法访问该属性,然后创建 People 类的实例,并通过实例名输出私有属性 _ _eye,代码如下:

class People:  # 创建一个人类    """人类"""    __eye = '有两只眼睛'    def __init__(self):  # 构造方法        print('__init__():', People.__eye)  # 在实例方法中访问私有属性man = People()  # 创建People类的实例print('加入类名:', man._People__eye)  # 私有属性,可以通过"实例名._类名__xxx"方式访问print('直接访问:', man.__eye)  # 私有属性不能通过实例名访问,出错

  执行上面的代码后,将输出如下图所示结果:

在这里插入图片描述

  从上面的运行结果可以看出:私有属性不能直接通过实例名 + 属性名访问,可以在类的实例方法中访问,也可以通过 “类的实例名._ 类名 _ _ xxx” 访问

来源地址:https://blog.csdn.net/2201_75641637/article/details/129467576

--结束END--

本文标题: Python中类的定义和使用细讲

本文链接: https://www.lsjlt.com/news/421617.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中类的定义和使用细讲
    文章目录 前言一、定义类二、创建类的实例三、创建 _ _ init _ _() 方法四、创建类的成员并访问1. 创建实例方法并访问2. 创建数据成员并访问 五、访问限制 前言   在...
    99+
    2023-09-29
    python 面向对象编程 属性和方法
  • python枚举类型定义与使用讲解
    目录1.定义2.使用3.枚举构造器1.定义 在某些情况下,一个类的对象是有限且固定的,比如季节类,它只有 4 个对象;再比如行星类,目前只有 8 个对象。这种实例有限且固定的类,在 ...
    99+
    2024-04-02
  • Python类的定义和使用详情
    目录一、前言二、定义类三、创建类的实例四、“魔术”方法——_ init _()五、创建类的成员并访问1.创建实例方法并访问2.创建数据...
    99+
    2024-04-02
  • 【Python详解】Python类的详细定义与使用案例
    大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我! 本文目...
    99+
    2023-09-04
    python python类 类的定义 python类的使用 python类的定义
  • python中函数的定义和详细的使用方法
    1. 函数的概念,函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集   2. 函数的作用,使用函数可以加强代码的复用性,提高程序编写的效率   3. 函数的使用,函数必须先创建才可以使用,该过程称为函数定义,函数创建...
    99+
    2023-01-30
    使用方法 函数 定义
  • Python超详细讲解元类的使用
    目录类的定义一、什么是元类二、注意区分元类和继承的基类三、type 元类的使用四、自定义元类的使用类的定义 对象是通过类创建的,如下面的代码: # object 为顶层基类 clas...
    99+
    2024-04-02
  • Python自定义元类的实例讲解
    1、说明 一个类没有声明自己的元类,默认他的元类就是type,除了使用元类type,用户也可以通过继承type来自定义元类。 2、实例 我们可以使用类属性 __metaclass__...
    99+
    2024-04-02
  • Python枚举类定义和使用方法
    前言: 一些具有特殊含义的类,其实例化对象的个数往往是固定的,比如用一个类表示月份,则该类的实例对象最多有 12 个;再比如用一个类表示季节,则该类的实例化对象最多有 4 个。 针对...
    99+
    2024-04-02
  • Python枚举类怎么定义和使用
    本篇内容主要讲解“Python枚举类怎么定义和使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python枚举类怎么定义和使用”吧!一些具有特殊含义的类,其实例化对象的个数往往是固定的,比如用...
    99+
    2023-06-30
  • 在Python中定义和使用 抽象类及抽象
    原文链接:http://www.jb51.net/article/87710.htm 本文根据自己的理解和思考,对原文略有改动。。。 Python中我们可以使用abc模块来构建抽象类。在讲抽象类之前,先说下抽象方法的实现。 抽象方法是基类...
    99+
    2023-01-31
    抽象 定义 抽象类
  • Java 超详细讲解类的定义方式和对象的实例化
    目录1.面对对象的初步认识1.1什么是面向对象1.2面向对象与面向过程2.类的定义与使用2.1简单认识类2.2 类的定义格式3.类的实例化3.1什么是实例化?3.2重点笔记总结1.面...
    99+
    2024-04-02
  • python中类中属性和方法怎么定义使用
    今天小编给大家分享一下python中类中属性和方法怎么定义使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2024-04-02
  • Python基础之类的定义和使用详解
    目录1、定义类2、创建类的实例3、“魔术”方法——_ init ()4、创建类的成员并访问4.1、创建实例方法并访问4.2、创建数据成...
    99+
    2024-04-02
  • Python类的定义和使用方法是什么
    这篇文章主要介绍了Python类的定义和使用方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python类的定义和使用方法是什么文章都会有所收获,下面我们一起来看看吧。一、前言在Python中,类表示具...
    99+
    2023-07-02
  • 怎么在python中使用namedtuple定义类
    这篇文章给大家介绍怎么在python中使用namedtuple定义类,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言...
    99+
    2023-06-14
  • python中如何使用自定义异常类
    本篇文章为大家展示了python中如何使用自定义异常类,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。自定义异常类自定义类继承系统的异常基类exception自定义异常类的构造函数等方法进行处理举例:...
    99+
    2023-06-20
  • python中让自定义的类使用加号"+"
    目录1、python的魔法方法__add__()2、对CartoonImage重载“+”2.1 实现CartoonImage类3、测试“+&rdq...
    99+
    2024-04-02
  • Python中怎么定义和使用元组
    本篇内容介绍了“Python中怎么定义和使用元组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!定义和使用元组在Python中,元组也是多个元...
    99+
    2023-06-01
  • SpringCloud超详细i讲解Feign自定义配置与使用
    目录日志配置Basic 认证配置超时时间配置客户端组件配置GZIP压缩配置继承特性多参数请求构造日志配置 有时候我们遇到 Bug,比如接口调用失败、参数没收到等 问题,或者想看看调用...
    99+
    2024-04-02
  • Django细致讲解多对多使用through自定义中间表方法
    目录多对多中间表详解默认中间表通过through自定义中间表多对多中间表详解 我们都知道对于ManyToMany字段,Django采用的是第三张中间表的方式。通过这第三张表,来关联M...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作