python cls方法_关于类方法中的cls
在python的类方法中,默认使用的第一个参数是cls,而在实例方法中,一般使用self作为第一个参数。
两处比较:
(1)比较一般类方法中的self和cls的区别:一般来说,使用某个类的方法,需要先将类实例化,赋予一个对象才可以调用类中的方法,但是如果使用了@staticmethod 或@classmethod,就可以不用实例化,直接类名.方法名()来调用。这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。举例:
class A(object):
a='a'
@staticmethod
def foo1(name):#静态函数
print("hello",hello)
def foo2(self,name):#常规函数
print("hello",name)
@classmethod
def foo3(cls,name):#类方法
print("hello",name)
接着我们实例化A类,a=A()
print(a.foo1('ma'))#output:hello ma
print(A.foo1('ma'))#output:hello ma
而foo2是常规函数,只能通过类的实例化来调用,即a.foo2()来调用。
而foo3是类函数,cls作为第一个参数用来表示类本身,在类方法中用到,类方法只是与类本身有关而与实例无关的方法。可以通过实例化来调用,也可以通过类名.类函数名来调用。即a.foo3('mam')或A.foo3('mam')
(2)staticmethod和classmethod方法的区别
在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)#可以在foo3中调用foo2,因为持有cls参数,彷佛是类本身,故可以调用该foo2方法。
第三点是关于cls(),其实这就是类本身,比如这里的cls()=A,如果cls()里面有参数,那么这个参数就是构造函数init(self,parameter1,parameter2)中的参数1,2,同时还是表示类本身。举例:
python_9day
python cls方法_关于类方法中的cls相关推荐
- python static方法_浅谈python 类方法/静态方法
1.类方法 类方法是从属于"类对象"的方法.类对象可以通过装饰器@classmethod来定义,具体格式如下: @classmethod def 类方法名(cls [, 形参列表] ...
- java static修饰方法_浅析Java中static修饰符
1.概述 static关键字的中文意思是静态的,该修饰符可以修饰字段.方法.内部类.使用该关键字修饰的内容,在面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的 ...
- python安装方法_【Python教程】Windows10 安装Python
在此教程中,我们将学习一步一步在windows10 系统安装Python环境. 首先访问官网: https://www.python.org/downloads/ 点击下载,下载安装包.双击后有两个选 ...
- python selenium 下拉列表_从下拉列表中选择python selenium选项
我试图使用下面的代码使用selenium(python)从网页上的下拉列表中选择一个选项.在from selenium import webdriver from selenium.webdriver ...
- java中日期比较方法_在java中进行日期时间比较的4种方法
1. Date.compareTo() java.util.Date 提供了在 Java 中比较两个日期的经典方法compareTo(). 如果两个日期相等,则返回值为0. 如果Date在date参数 ...
- python临床数据_从临床试验中获取数据
我正在开发一个小Python函数来从clinicalTrials.gov中获取数据.从每个研究记录中,我想从中找出研究的目标条件.例如,对于this研究记录,我需要以下内容:conditions = ...
- python注入进程_向进程中注入Python代码
我想把Python代码注入到一个进程中,当它注入时,它似乎会使我的进程崩溃.我没有在我自己的程序中得到任何错误,但目标进程停止工作.被调用的非托管api没有给我任何错误,并且似乎已经正确地执行了它们的 ...
- 不属于python语言保留字_以下选项中,不属于Python保留字的是( )_学小易找答案...
[判断题]用摆式仪测试摆值同一处平行测定不少于3次,3个测点间距2~5m.( ) [单选题]下面是单拍子的是 [填空题]假设列表对象 aList 的值为 [3,4,5,6,7,9,11,13,15,1 ...
- 3_1符合python语言变量_以下选项中符合Python语言变量命名规则的是
[单选题]以下选项中,不是Python语言特点的是 [单选题]较小的尺寸应离轮廓线较近,较大的尺寸线离轮廓线较远.( ) [单选题]关于Python语言的变量,以下选项中说法正确的是 [单选题]182 ...
最新文章
- 投影参数_智能投影仪参数如何去看,其实很简单
- img summernote 加类_控制好情绪 的动态 - SegmentFault 思否
- mysql t-sql,将T-SQL转换为MySQL
- 如何在 GPU 上加速数据科学
- expect switch 多条件_JavaScript-流程控制语句:选择结构(if和switch)
- 移动WEB的页面布局
- Linux 文本格式显示折线图,linux 折线图
- 又发现一个visual studio 2015的坑啊。
- python烟花表白_python炫酷烟花表白源代码
- 新建第一个windows服务(Windows Service)
- Codeforces Round #434 (Div. 2)【A、B、C、D】
- 【计算机组成原理】双端口RAM和多模块存储器
- c语言求员工的平均分数,用C语言编程平均分数
- mysql 释放行锁_《深入精通Mysql(三)》深入底层Mysql各种锁机制(面试必问)...
- 用matlab仿真0到9十个数字的语音识别
- python3 获取文件目录_python3--os.path获取当前文件的绝对路径和所在目录
- dts双轨制会员积分系统,直销系统,分销系统
- 读后感__局外人_知其不可而为之
- 图像处理(8)–灰度变换函数增强空间域图像
- 《啤酒与尿布》之读感
热门文章
- work-notes(8):如何制作卡片凹陷?如何制作梯形?如何制作有凹陷的盒子?如何制作透明凹陷?
- 前馈神经网络公式推导
- web前端全栈0基础到精通(祺)vue 03
- python技术栈全景图_程序员之数据分析Python技术栈
- 2022最新自动化测试面试题精选
- java keytool证书,java keytool 安全证书学习
- “Windows 资源保护找到了损坏文件但无法修复其中某些文件”的问题
- 关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事
- Python中用print函数输出
- java基础-IO编程