当前位置:首页 > 互联网 > 正文内容

Python类对象的创建和使用

小楼听雨7个月前 (05-20)互联网74

Python类的实例化

对已定义好的类进行实例化,其语法格式如下:

类名(参数)

定义类时,如果没有手动添加 __init__() 构造方法,又或者添加的 __init__() 中仅有一个 self 参数,则创建类对象时的参数可以省略不写。

例如,如下代码创建了名为 CLanguage 的类,并对其进行了实例化:

class CLanguage :# 下面定义了2个类变量name = "C语言中文网"add = "http://c.biancheng.net"def __init__(self,name,add):#下面定义 2 个实例变量self.name = nameself.add = addprint(name,"网址为:",add)# 下面定义了一个say实例方法def say(self, content):print(content)# 将该CLanguage对象赋给clanguage变量clanguage = CLanguage("C语言中文网","http://c.biancheng.net")

在上面的程序中,由于构造方法除 self 参数外,还包含 2 个参数,且这 2 个参数没有设置默认参数,因此在实例化类对象时,需要传入相应的 name 值和 add 值(self 参数是特殊参数,不需要手动传值,Python 会自动传给它值)。

类变量和实例变量,简单地理解,定义在各个类方法之外(包含在类中)的变量为类变量(或者类属性),定义在类方法中的变量为实例变量(或者实例属性),二者的具体区别和用法可阅读《Python类变量和实例变量

Python类对象的使用

定义的类只有进行实例化,也就是使用该类创建对象之后,才能得到利用。总的来说,实例化后的类对象可以执行以下操作:

  • 访问或修改类对象具有的实例变量,甚至可以添加新的实例变量或者删除已有的实例变量;

  • 调用类对象的方法,包括调用现有的方法,以及给类对象动态添加方法。

类对象访问变量或方法

使用已创建好的类对象访问类中实例变量的语法格式如下:

类对象名.变量名

使用类对象调用类中方法的语法格式如下:

对象名.方法名(参数)

注意,对象名和变量名以及方法名之间用点 "." 连接。

例如,下面代码演示了如何通过 clanguage 对象调用类中的实例变量和方法:

#输出name和add实例变量的值print(clanguage.name,clanguage.add)#修改实例变量的值clanguage.name="Python教程"clanguage.add="http://c.biancheng.net/python"#调用clanguage的say()方法clanguage.say("人生苦短,我用Python")#再次输出name和add的值print(clanguage.name,clanguage.add)

程序运行结果为:

C语言中文网 网址为: http://c.biancheng.net
C语言中文网 http://c.biancheng.net
人生苦短,我用Python
Python教程 http://c.biancheng.net/python

给类对象动态添加/删除变量

Python 支持为已创建好的对象动态增加实例变量,方法也很简单,举个例子:

# 为clanguage对象增加一个money实例变量clanguage.money= 159.9print(clanguage.money)

运行结果为:

159.9

可以看到,通过直接增加一个新的实例变量并为其赋值,就成功地为 clanguage 对象添加了 money 变量。

既然能动态添加,那么是否能动态删除呢?答案是肯定的,使用 del 语句即可实现,例如:

#删除新添加的 money 实例变量del clanguage.money#再次尝试输出 money,此时会报错print(clanguage.money)

运行程序会发现,结果显示 AttributeError 错误:

Traceback (most recent call last):
  File "C:/Users/mengma/Desktop/1.py", line 29, in <module>
    print(clanguage.money)
AttributeError: 'CLanguage' object has no attribute 'money'

给类对象动态添加方法

注意,初学者在理解下面内容之前,需明白 self 参数的含义和作用,可阅读《Python self用法》详细了解。

Python 也允许为对象动态增加方法。以本节开头的 Clanguage 类为例,由于其内部只包含一个 say() 方法,因此该类实例化出的 clanguage 对象也只包含一个 say() 方法。但其实,我们还可以为 clanguage 对象动态添加其它方法。

需要注意的一点是,为 clanguage 对象动态增加的方法,Python 不会自动将调用者自动绑定到第一个参数(即使将第一个参数命名为 self 也没用)。例如如下代码:

# 先定义一个函数def info(self):print("---info函数---", self)# 使用info对clanguage的foo方法赋值(动态绑定方法)clanguage.foo = info# Python不会自动将调用者绑定到第一个参数,# 因此程序需要手动将调用者绑定为第一个参数clanguage.foo(clanguage)  # ①# 使用lambda表达式为clanguage对象的bar方法赋值(动态绑定方法)clanguage.bar = lambda self: print('--lambda表达式--', self)clanguage.bar(clanguage) # ②

上面的第 5 行和第 11 行代码分别使用函数、lambda 表达式为 clanguage 对象动态增加了方法,但对于动态增加的方法,Python 不会自动将方法调用者绑定到它们的第一个参数,因此程序必须手动为第一个参数传入参数值,如上面程序中 ① 号、② 号代码所示。

有读者可能会问,有没有不用手动给 self 传值的方法呢?通过借助 types 模块下的 MethodType 可以实现,仍以上面的 info() 函数为例:

纯文本复制
def info(self,content):print("C语言中文网地址为:%s" % content)# 导入MethodTypefrom types import MethodTypeclanguage.info = MethodType(info, clanguage)# 第一个参数已经绑定了,无需传入clanguage.info("http://c.biancheng.net")

可以看到,由于使用 MethodType 包装 info() 函数时,已经将该函数的 self 参数绑定为 clanguage,因此后续再使用 info() 函数时,就不用再给 self 参数绑定值了。




扫描二维码推送至手机访问。

版权声明:本文由小楼听雨发布,如需转载请注明出处。

本文链接:https://www.xyz5668.top/?id=8

分享给朋友:

“Python类对象的创建和使用” 的相关文章

Python常用第三方库

Python常用第三方库一、 文件读写二、网络抓取和解析三、数据库连接四、数据清洗转换五、数据计算和统计分析六、自然语言处理和文本挖掘七、图像和视频处理八、音频处理九、数据挖掘/机器学习/深度学习十、数据可视化十一、交互学习和集成开发十二、其他Python协同数据工作工具十三、其他一、 文件读写文件...

Python爬虫 爬虫需要遵守的规则

Python爬虫学习Python爬虫过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。—— 爬虫需要遵守的规则 ——文章目录Python爬虫(二十)网络爬虫的尺寸网络爬虫引发的问题网络爬虫的限制Robots协议Robots协议的遵守方式—— 爬虫需要遵守的规则 ——网络爬虫...

Python re模块用法详解

在 Python 爬虫过程中,实现网页元素解析的方法有很多,正则解析只是其中之一,常见的还有 BeautifulSoup 和 lxml,它们都支持网页 HTML 元素的解析操作。本节重点讲解如何使用 re 正则解析模块实现网页信息的提取。注意:在学习本节知识之前,您应该基本掌握了 Pyth...

Python Selenium基本用法

Selenium 作为一款 Web 自动化测试框架,提供了诸多操作浏览器的方法,本节对其中的常用方法做详细介绍。定位节点Selenium 提供了 8 种定位单个节点的方法,如下所示:方法说明find_element_by_id()通过 id 属性值定位find_element_by_name()通过...

Python爬虫实现Cookie模拟登录

Python爬虫实现Cookie模拟登录

在使用爬虫采集数据的规程中,我们会遇到许多不同类型的网站,比如一些网站需要用户登录后才允许查看相关内容,如果遇到这种类型的网站,又应该如何编写爬虫程序呢?Cookie 模拟登录技术成功地解决了此类问题。Cookie 是一个记录了用户登录状态以及用户属性的加密字符串。当你第一次登陆网站时,服务端会在返...

Python多线程爬虫详解

Python多线程爬虫详解

网络爬虫程序是一种 IO 密集型程序,程序中涉及了很多网络 IO 以及本地磁盘 IO 操作,这些都会消耗大量的时间,从而降低程序的执行效率,而 Python 提供的多线程能够在一定程度上提升 IO 密集型程序的执行效率。如果想学习 Python 多进程、多线程以及 Python GIL 全局解释器锁...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。