一、前言

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

二、定义类

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

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

参数说明:

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

三、创建类的实例

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

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

ClassName(parameterlist)

参数说明:

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

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

# 创建类
class Geese:
    """大雁类"""
    pass
# 创建实例
wildGoose = Geese()
print(wildGoose)

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

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

四、“魔术”方法——_ 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)

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

五、创建类的成员并访问

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

1.创建实例方法并访问

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

创建实例的方法的语法格式如下:

def functionName(self,parameterlist):
	block

参数说明:

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

实例创建完成后,可以通过类的实例名称和点(.)操作符进行访问。

具体的语法格式如下:

instanceName.functionName(parametervalue)

参数说明:

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

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)
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并没有对属性和方法的访问权限进行限制。为了保证类内部的某些属性或方法不被外部所访问,可以在属性或方法名前面添加单下划线(_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 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)

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

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

到此这篇关于Python类的定义和使用详情的文章就介绍到这了,更多相关Python类的定义内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Python类的定义和使用详情的更多相关文章

  1. 如何在PHP环境中使用ProtoBuf数据格式

    这篇文章主要介绍了如何在PHP环境中使用ProtoBuf数据格式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

  2. 使用sockets:从新闻组中获取文章(三)

    >我们从服务器的这个新闻组中读取了最后的十篇文章,。也可以通过使用HEAD命令读取文章的头信息,或者使用BODY命令读取文章内容。>关于fclose()的更多信息,请参考http://www.php.net/manual/function.fclose.php结论在上文中,我们看到了怎样打开、使用然后关闭一个socket:连接到一个NNTP服务器,取回一些文章。使用POST命令发表文章也复杂不到哪儿去。下一步就是编写一个基于WEB的新闻组客户端了。这样,你有了一个基于web的搜索新闻组的程序了。

  3. JavaScript中Webpack的使用教程

    Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源,这篇文章主要介绍了JavaScript中Webpack的使用,需要的朋友可以参考下

  4. vue3中$attrs的变化与inheritAttrs的使用详解

    $attrs现在包括class和style属性。 也就是说在vue3中$listeners不存在了,vue2中$listeners是单独存在的,在vue3 $attrs包括class和style属性, vue2中 $attrs 不包含class和style属性,这篇文章主要介绍了vue3中$attrs的变化与inheritAttrs的使用 ,需要的朋友可以参考下

  5. PHP中GET变量的使用

    自PHP4.1.0以后将HTTP_GET_VARS使用GET变量来保存,GET的变量主要来自以下的方法对服务器以获取资料信息为请求方法的例如,URL,使用FORM的METHOD为GET方式。这样所有的请求变量将通过URL传递给服务器,服务器根据配置调用相关的解释器来处理这些GET出来的变量。arg_separator.input=";,"————二、自己编写解释语法list=$_GET;//将GET变量分解出来$tmp=explode;//将数据分出这个用法的优点在于,别人无法知道您传递的值是被谁使用,您

  6. Python数据分析 Numpy 的使用方法

    这篇文章主要介绍了Python数据分析 Numpy 的使用方法,Numpy 是一个Python扩展库,专门做科学计算,也是大部分Python科学计算库的基础,关于其的使用方法,需要的小伙伴可以参考下面文章内容

  7. 关于@RequestLine的使用及配置

    这篇文章主要介绍了关于@RequestLine的使用及配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  8. Flask-Sqlalchemy的基本使用详解

    本文主要介绍了Flask-Sqlalchemy的基本使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  9. IOS之UIWebView的使用(基本知识)

    在Android开发中有WebView作为混合模式开发的桥梁,当然在IOS中也同样有一个 UIWebView 组件来作为混合模式开发的桥梁,那么下面就对UIWebView的一些基本知识详解一下

  10. 详解Android中AIDL的使用

    AIDL是Android Interface definition language的缩写,对于小白来说,AIDL的作用是让你可以在自己的APP里绑定一个其他APP的service,这样你的APP可以和其他APP交互,接下来通过本文给大家分享Android AIDL使用,需要的朋友参考下吧

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部