iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python基础之类的定义和使用详解
  • 299
分享到

Python基础之类的定义和使用详解

2024-04-02 19:04:59 299人浏览 泡泡鱼

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

摘要

目录1、定义类2、创建类的实例3、“魔术”方法——_ init ()4、创建类的成员并访问4.1、创建实例方法并访问4.2、创建数据成

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

1、定义类

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

class ClassName:
“”“类的帮助信息”“” # 类文本字符串
statement # 类体

参数说明

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

2、创建类的实例

定义完成后,并不会真正创建一个实例。这就好比一个汽车的设计图。设计图可以告诉你汽车看上去怎么样,但设计图本身不是一个汽车。你不能开走它,它只能用来建造真正的汽车,而且可以使用它制造很多汽车。那么如何创建实例呢?

class语句本身并不创建该类的任何实例。所以在类定义完成以后,可以创建类的实例,即实例化该类的对象。创建类的实例的语法如下:

ClassName(parameterlist)

参数说明

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

例如,创建上面Geese类的实例,可以使用下面代码:

# 创建类
class Geese:
“”“大雁类”“”
pass

# 创建实例
wildGoose = Geese()
print(wildGoose)

执行上面代码后,将显示类似下面的内容:

从上面的执行结果中可以看出,wildGoose是Geese类的实例。

3、“魔术”方法——_ init ()

在创建类后,类通常会自动创建一个__init_()方法。该方法是一个特殊的方法,类似JAVA 语言中的构造方法。

每当创建一个类的新实例时,Python都会自动执行它。init()方法必须包含一个参数,并且必须是第一参数。self参数是一个指向实例本身的引用,用于访问类中的属性和方法。

在方法调用时会自动传递实际参数self。因此,当__init__()方法只有一个参数时,在创建类的实例时,就不需要指定参数了。

例如,下面乃然以大雁为例,并创建__init__()方法,代码如下:

# 创建类
class Geese:
“”“大雁类”“”

def __init__(self):
    print("我是大雁类")

wildGoose = Geese()

运行以上代码,将输出以下内容:

常见错误

在为类创建__init__()方法时,在开发环境中运行下面的代码:

# 创建类
class Geese:
“”“大雁类”“”

def __init__():             # 构建方法
    print("我是大雁类")

wildGoose = Geese() # 创建大雁实例

运行上述代码,将抛出以下异常:

在__init__()方法中,除了self参数外,还可以自定义一些参数,参数间使用逗号“,”进行分隔。

例如,下面的代码将在创建__init__()方法时,再指定3个参数,分别是beak、wing和claw:

# 创建类
class Geese:
“”“大雁类”“”

def __init__(self, beak, wing, claw):
    print("我是大雁类!我有一下特征:")
    print(beak)
    print(wing)
    print(claw)

beak_1 = “喙”
wing_1 = “翅膀”
claw_1 = “爪”
wildGoose = Geese(beak_1, wing_1, claw_1)

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

4、创建类的成员并访问

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

4.1、创建实例方法并访问

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

def functionName(self,parameterlist):
    block

参数说明

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

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

instanceName.functionName(parametervalue)

参数说明

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

4.2、创建数据成员并访问

数据成员是指类中定义的变量,即属性,根据定义位置,又可以分为类属性和实例属性,下面分别进行介绍。

类属性

类属性是指在定义类中,并且在函数体外的属性。类属性可以在类的所有实例之间共享值,也就是在所有实例化的对象中公用。

例如,定义一个雁类,在该类中定义3个属性,用于记录雁的特征,代码如下:

class Geese:
    """大雁类"""
    beak_1 = "喙,比较尖"  # 定义类属性(喙)
    wing_1 = "翅膀,比较大" 
    claw_1 = "爪,行走自如"

    def __init__(self):
        print("我是大雁类!我有一下特征:")
        print(Geese.beak_1)   # 输出喙的属性
        print(Geese.wing_1)
        print(Geese.claw_1)

创建上面的类Geese,然后创建类的实例,代码如下:

goose = Geese()  # 实例化一个雁的对象

运行上面代码创建Geese类的实例后,将显示以下内容:

实例属性

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

例如,定义一个雁类Geese,在该类的__init__()方法中定义3个实例属性,用于记录雁类的特征,代码如下:

# 创建类
class Geese:
    """大雁类"""
    def __init__(self):
        self.beak_1 = "喙,比较尖"  # 定义实例属性(喙)
        self.wing_1 = "翅膀,比较大"
        self.claw_1 = "爪,行走自如"
        print("我是大雁类!我有一下特征:")
        print(self.beak_1)   # 输出喙的属性
        print(self.wing_1)
        print(self.claw_1)

创建上面的类Geese,然后创建类的实例,代码如下:

goose = Geese()  # 实例化一个雁的对象

运行上面代码创建Geese类的实例后,将显示以下内容:

说明

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

对于实例的属性也可以通过实例名称修改,与类不同,通过实例名称修改实例属性后,并不能影响该类的其他实例中相应的实例属性值。

例如,定义一个雁类,并在__init__()方法中定义一个实例属性,然后创建两个Geese类的实例,并修改一个实例属性,最后分别输出实例属性,代码如下:

# 创建类
class Geese:
    """大雁类"""
    

    def __init__(self):
        self.beak_1 = "喙,比较尖"  # 定义实例属性(喙)
        print(self.beak_1) # Python学习交流君羊 279199867


goose1 = Geese()  # 创建Geese实例1
goose2 = Geese()  # 创建Geese实例2
goose1.beak_1 = "喙,比长鹅尖"  # 修改实例属性
print("goose1的beak_1属性:", goose1.beak_1)
print("goose2的beak_1属性:", goose2.beak_1)

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

5、访问限制

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

为了保证类内部的某些属性或方法不被外部所访问,可以在属性或方法名前面添加单下划线(_foo)、双下划线(__foo)或者首尾加双下划线( __ foo __),从而限制访问权限。

其中,单下划线、双下划线、首尾双下划线的作用如下:

  • __ foo __ :首尾双下划线表示定义特殊方法,一般是系统定于名字,如__init__()。
  • _foo:以单下划线开头的表示protected(保护)类型的成员,只允许类本身或子类访问,但不能使用“ from module impor”语句导入。

例如,创建一个Swan类,定义保护属性_neck_swan,并在__init__()方法中访问该属性,然后创建Swan类的实例,并通过实例名输出保护属性_neck_swan,代码如下:

class Swan:
    """天鹅类"""
    _neck_swan = "天鹅脖子长"  # 创建私有属性

    def __init__(self):
        print("__init__():", Swan._neck_swan)


swan = Swan()  # 创建Swan类
print("直接访问:", swan._neck_swan)

执行以上代码,将显示以下内容:

从上面的运行结果中可以看出:保护属性可以通过实例名访问。

__foo:双下划线表示private(私有)类型的成员,只允许定义该方法的类本身进行访问,而且也不能通过类的实例进行访问,但是可以通过“类的实例名.类名 __xxx”方式访问。

例如,创建一个Swan类,定义保护属性__neck_swan,并在__init__()方法中访问该属性,然后创建Swan类的实例,并通过实例名输出保护属性__neck_swan,代码如下:

class Swan:
    """天鹅类"""
    __neck_swan = "天鹅脖子长"  # 创建私有属性

    def __init__(self):
        print("__init__():", Swan.__neck_swan)


swan = Swan()  # 创建Swan类
print("加入类名:", swan._Swan__neck_swan)
print("直接访问:", swan.__neck_swan)

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

从上面的运行结果可以看出:私有属性可以通过“类名.属性名”方式访问,也可以通过“实例名.类名__xxx”方式访问,但是不能直接通过“实例名.属性名”方式访问。

以上就是Python基础之类的定义和使用详解的详细内容,更多关于Python类的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python基础之类的定义和使用详解

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

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

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

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

下载Word文档
猜你喜欢
  • Python基础之类的定义和使用详解
    目录1、定义类2、创建类的实例3、“魔术”方法——_ init ()4、创建类的成员并访问4.1、创建实例方法并访问4.2、创建数据成...
    99+
    2024-04-02
  • python基础之定义类和对象详解
    定义简单的类 面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这些方法了! 定义只包含方法的类 在python中,要定义一个只包含方法的类,...
    99+
    2024-04-02
  • python基础之函数的定义和调用
    # 第一题 # 写函数,接受n个数字,求这些参数数字的和 def sumFunc(*args): # 处理接受的数据 result=0 for item...
    99+
    2024-04-02
  • Python基础之dict和set的使用详解
    目录dictset再议不可变对象小结dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言种也称为map,使用键-值(key-value)存储...
    99+
    2024-04-02
  • Python基础之元类详解
    1.python 中一切皆是对象,类本身也是一个对象,当使用关键字 class 的时候,python 解释器在加载 class 的时候会创建一个对象(这里的对象指的是类而非类的实例)...
    99+
    2024-04-02
  • Python类的定义和使用详情
    目录一、前言二、定义类三、创建类的实例四、“魔术”方法——_ init _()五、创建类的成员并访问1.创建实例方法并访问2.创建数据...
    99+
    2024-04-02
  • Python基础之数据类型详解
    目录一、整数二、浮点数三、复数四、运算符,优先级以及结合性五、混合类型计算六、除法七、十进制,八进制,十六进制和二进制八、位操作九、集合十、布尔类型十一、其他数值类型一、整数 pyt...
    99+
    2024-04-02
  • Java基础之详解基本数据类型的使用
    一、整型 主要扩展一下不同进制的整型 二进制、八进制、十进制、十六进制 * 二进制 : 0B(数字零+B) 0b(数字零+b) * 八进制 :0(数字零开头) * 十进制 :正常写...
    99+
    2024-04-02
  • Java基础入门篇之如何使用面向对象和类的定义
    这篇文章主要讲解了“Java基础入门篇之如何使用面向对象和类的定义”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java基础入门篇之如何使用面向对象和类的定义”吧!一、面向对象面向对象是在程...
    99+
    2023-06-15
  • Java基础之自定义类加载器
    目录一、类加载器关系二、基于本地class文件的自定义类加载器三、遇到的问题四、基于网络(url)class文件的自定义类加载器一、类加载器关系 自定义类加载器 创建一个类继承C...
    99+
    2024-04-02
  • Java基础之Object类详解
    object类的介绍 object是所有类的直接父类或者是间接父类,为什么这么说呢? 可以查询java8的API帮助文档: 可见在这样的一个类树中,所有的类的根还是Object类 ...
    99+
    2024-04-02
  • Python中的基础定义
    Python中的文档字符串:可以当作一种特殊的注释,简单的说明可以使用单引号或双引号,较长的文字说明可以使用三引号变量定义:第一个字符只能是大小写字母或下划线,区分大小写运算符:(1)算术运算符:+ 、- 、* 、/ 、// 、% 、**(...
    99+
    2023-01-31
    定义 基础 Python
  • python 类的基础详解与应用
    目录类的定义类对象变量类变量局部变量实例变量私有变量类的方法特殊方法继承单继承多继承类的定义 # class是定义类的关键字,ClassName为类的名称 class Class...
    99+
    2024-04-02
  • 【Python详解】Python类的详细定义与使用案例
    大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我! 本文目...
    99+
    2023-09-04
    python python类 类的定义 python类的使用 python类的定义
  • Java基础类库之StringBuffer类用法详解
    StringBuffer类 String类是在所有开发项目开发之中一定会使用的一个功能类,并且这个类拥有如下功能 每个字符串的常量都属于一个String类匿名对象,并且不能修改;St...
    99+
    2024-04-02
  • Java基础教程之数组的定义与使用
    目录一.数组的基本概念二.数组的声明三.数组的创建及初始化1.数组的创建2.数组的初始化四.访问数组元素 五.for each 循环 六.数组的拷贝 七.数组排序 八.二维数组 总结...
    99+
    2024-04-02
  • Java基础类之ArrayUtils工具类详解
    目录1、引入pom依赖2、ArrayUtils中的方法:3、举例总结1、引入pom依赖 <!-- https://mvnrepository.com/artifact/o...
    99+
    2024-04-02
  • Python基础之模块详解
    目录一、模块1、模块的四种形式2、为什么要用模块?二、如何用模块1、import 模块名导入重命名:smt变量指向span模块的名称空间导入多个模块2、from 模块名 import...
    99+
    2024-04-02
  • Python基础之进程详解
    目录一、前言二、基本用法三、创建单个进程四、创建多个进程五、进程池六、锁七、进程间通信八、信号量九、数据共享十、总结一、前言 进程,一个新鲜的字眼,可能有些人并不了解,它是系统某个运...
    99+
    2024-04-02
  • GoFrame glist 基础使用和自定义遍历
    目录基础概念基本使用打印结果glist链表遍历打印结果小技巧join序列化和反序列化总结基础概念 GoFrame框架(下文简称gf)提供的数据类型,比如:字典gmap、数组garra...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作