python中cls和self的功能讲解
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容主要讲解"python中cls和self的功能讲解",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"python中cls和self的功能讲解"吧!一般
千家信息网最后更新 2025年02月01日python中cls和self的功能讲解
本篇内容主要讲解"python中cls和self的功能讲解",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"python中cls和self的功能讲解"吧!
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。
而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。
这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。
class A(object): a = 'a' @staticmethod def foo1(name): print 'hello', name def foo2(self, name): print 'hello', name @classmethod def foo3(cls, name): print 'hello', name
首先定义一个类A,类A中有三个函数,foo1为静态函数,用@staticmethod装饰器装饰,这种方法与类有某种关系但不需要使用到实例或者类来参与。如下两种方法都可以正常输出,也就是说既可以作为类的方法使用,也可以作为类的实例的方法使用。
a = A()a.foo1('mamq') # 输出: hello mamqA.foo1('mamq')# 输出: hello mamq
foo2为正常的函数,是类的实例的函数,只能通过a调用。
a.foo2('mamq') # 输出: hello mamqA.foo2('mamq') # 报错: unbound method foo2() must be called with A instance as first argument (got str instance instead)
foo3为类函数,cls作为第一个参数用来表示类本身. 在类方法中用到,类方法是只与类本身有关而与实例无关的方法。如下两种方法都可以正常输出。
a.foo3('mamq') # 输出: hello mamqA.foo3('mamq') # 输出: hello mamq
但是通过例子发现staticmethod与classmethod的使用方法和输出结果相同,再看看这两种方法的区别。
既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢
从它们的使用上来看,
@staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。
@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。
如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。
而@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。
也就是说在classmethod中可以调用类中定义的其他方法、类的属性,但staticmethod只能通过A.a调用类的属性,但无法通过在该函数内部调用A.foo2()。修改上面的代码加以说明:
class A(object): a = 'a' @staticmethod def foo1(name): print 'hello', name print A.a # 正常 print A.foo2('mamq') # 报错: unbound method foo2() must be called with A instance as first argument (got str instance instead) def foo2(self, name): print 'hello', name @classmethod def foo3(cls, name): print 'hello', name print A.a print cls().foo2(name)
到此,相信大家对"python中cls和self的功能讲解"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
方法
函数
输出
实例
参数
属性
类名
功能
对象
A.a
也就是
也就是说
代码
内容
有利
学习
实用
整洁
更深
相同
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
win7 数据库制作
低价网通服务器
物联设备网络安全监测系统的研发
绝地求生 锁定服务器
服务器给手机发验证码
平台网络安全要求
ftp服务器建模
蓝牙设备软件开发
数据库系统核心软件官方免费版
NHANES数据库怎么看懂
广州市弘泽网络技术
一梦江湖服务器有几个
向日葵解除服务器锁定
书商书目数据库都有哪些
数据库导入到另一个sql
鼎泰风华互联网科技有限公司
gis数据库字段代码中英文
星光mc服务器价格表
深圳服务器散热器价格
网络服务器在哪里
石家庄软件开发模型
数据库中实现排序的子句是
菲菲网络技术服务部
联盟手游服务器怎么改
书商书目数据库都有哪些
计算机网络技术及运用教材
刑警队辅警网络安全
数据库怎么删除一行数据库
网络服务器在哪里
软件开发有不加班的吗