【Python基础教程】类的定义和使用

哈喽兄弟们,今天咱们分享一下类的定义和使用。

 

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

1、定义类

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

class ClassName:
“”“类的帮助信息”“” # 类文本字符串
statement # 类体
# Python源码、教程获取群 279199867

 

参数说明

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

 

2、创建类的实例

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

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

ClassName(parameterlist)

 

参数说明

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

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

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

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

 

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

【Python基础教程】类的定义和使用

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

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

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

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

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

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

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

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

wildGoose = Geese()

 

运行以上代码,将输出以下内容:
【Python基础教程】类的定义和使用

常见错误

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

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

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

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

 

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

【Python基础教程】类的定义和使用

在__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)

 

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

【Python基础教程】类的定义和使用

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类的实例后,将显示以下内容:

【Python基础教程】类的定义和使用

实例属性

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

例如,定义一个雁类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类的实例后,将显示以下内容:

【Python基础教程】类的定义和使用

说明

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

【Python基础教程】类的定义和使用

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

例如,定义一个雁类,并在__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)

 

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

【Python基础教程】类的定义和使用

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)

 

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

【Python基础教程】类的定义和使用

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

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

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

class Swan:
    """天鹅类"""
# Python源码、教程领取群 279199867
    __neck_swan = "天鹅脖子长"  # 创建私有属性

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


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

 

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

【Python基础教程】类的定义和使用

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

好了,兄弟们,今天的分享就到这结束了,最后再分享一套Python教程给大家,涵盖了常见的爬虫案例,非常详细。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【Python基础教程】类的定义和使用 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 用Python实现简单的验证码识别

    我们在做采集数据的时候,过快或者访问频繁,或者一访问就给弹出验证码,然后就蚌珠了~      今天就给大家来一个简单处理验证码的方法 环境模块 本文使用的是 Python和pycharm   这里需要用到一个 ddddocr 模块 ,这是别人开源写好的一个东西,简单又好用,但是精确度差一点点,但是还是非常好用的。 如果你追求精确度的话,可以调用别人写好的一些…

    2023年4月2日
    00
  • 过年不让放炮,我用Python实现了1000响大地红的特效

    兄弟们,马上(还有13天)就要过年啦,今年能带对象回家了吗哈哈哈 新的一年,新的气象,穿上新衣准备过大年… 俗话说得好,这所谓放鞭炮就是来压邪祟,除恶的,但是近几年来都不让放炮了,搞得没有一点年尾,不过还好,2023年改革新政策!!!有一部分城市可以进行放鞭炮啦! 在新的一年里祝大家1、六六大顺,七星高照。2、新年快乐,龙马精神。3、官运亨通,美梦连连。4、…

    Python开发 2023年3月31日
    00
  • Python写一个自动发送直播弹幕的工具,非常好用!

    昨晚回家,表弟在看LOL直播,看得我气不打一处来,差点就想锤他。 身为程序员的表弟,看直播发弹幕居然还在手动发,当时我就用Python写了一个自动发送弹幕的脚本送给他用。 好了话不多说,我们直接开搞! 先看看效果 名字我就打码了,当然名字不是关键,我直接截图展示算了,GIF的话,太麻烦了。 接下来我们要准备好你想发送的弹幕内容 这个我都是随便打的,大家可以自…

    Python开发 2023年3月31日
    00
  • 重温Python基础——列表

    哈喽,兄弟们,今天让我们一起来重温一下Python基础中的列表,看看你还记得多少呢? 列表是什么 列表有一系列特定顺序排列的元素组成。可以包含字母表中的所有字母,数字等。其中的元素之间可以没有任何联系,列表通常包含多种元素。 在Python中用方括号([])表示列表,用逗号分隔其中的元素。 a=[‘wo’,’ai’,’xue’,’xi’,13,14]   访…

    Python开发 2023年4月2日
    00
  • 如何让电脑永不息屏?Python:这事我熟,只需5行代码…

    最近新来的小老弟问我,按照公司规定,电脑只有十分钟就锁屏,但是他不想让电脑在空闲十分钟后锁屏。 于是我问他,是不是想挑战一下公司信息安全? 不过小老弟很机智,来了句公司信息安全大于天,他就是想让自己多学点知识 ~ 既然他都这么说了,我就勉为其难的教一下他吧! 电脑永不息屏的两种方法 1、电脑手动方式 一般我们让电脑不息屏,正常操作步骤为: 电脑桌面空白处点击…

    Python开发 2023年4月2日
    00
  • 只用20行代码,Python实现爬取网易云音乐,非常简单!

    哈喽,大家好,今天咱们试试只用20行代码来实现批量获取网抑云文件保存本地,炒鸡简单! 悄悄的告诉你,其实不到20行代码~     你需要准备 本次使用的环境是Python3.8,编辑器是pycharm  模块使用的是requests、re、os 三个,其中requests是第三方模块,需要手动安装一下,re、os都是内置模块,不需要安装。 pip insta…

    2023年4月2日
    00
  • 不怕新歌有多嗨,就怕老歌带DJ,用Python批量下载dj歌曲!

    俗话说,不怕新歌有多嗨,就怕老歌带dj,为了验证这句话,于是我直接找了个dj网,用Python把dj都下载下来,亲身体验一下! 环境模块 软件 Python3.8 pycharm2021   模块 import requests import re   requests是数据请求模块,第三方模块,需要手动安装一下,win+r打开运行框,输入cmd按回车,然后…

    2023年4月2日
    00
  • 下班在家没事干?教大家用Python做一个任何视频都能看的软件, 当然,只能看正经的!

    这不,国庆假期结束了,又得开始上班下班之旅了~ 有没有被疫情堵着出不来的呢?     话说回来,放这么久的假,大家还记得Python吗? 这不是怕大家又不能出去旅游,回家了或者在宿舍没事干太无聊,所以特地给大家献上如何用Python来开发一款看视频不需要VIP的软件~ 如果想发给朋友用的话,咱们在打包成exe可执行软件,这样小伙伴也能一起用了~ 效果展示 我…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部