当前位置:首页 > 互联网

Python类对象的创建和使用

花晨月夕10个月前 (05-20)互联网132

Python类的实例化

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

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://m.856syz.top/?id=8

分享给朋友:

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

MySQL函数大全,MySQL常用函数汇总

MySQL函数大全,MySQL常用函数汇总

MySQL 函数会对传递进来的参数进行处理,并返回一个处理结果,也就是返回一个值。MySQL 包含了大量并且丰富的函数,这套 MySQL 函数大全只收集了几十个常用的,剩下的比较罕见的函数我们就不再整理了,读者可以到「MySQL 官网」查询。可以对 MySQL 常用函数进行简单的分类,大概包括数值型…

Python多线程爬虫详解

Python多线程爬虫详解

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

发表评论

访客

看不清,换一张

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