在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相关推荐

  1. python static方法_浅谈python 类方法/静态方法

    1.类方法 类方法是从属于"类对象"的方法.类对象可以通过装饰器@classmethod来定义,具体格式如下: @classmethod def 类方法名(cls [, 形参列表] ...

  2. java static修饰方法_浅析Java中static修饰符

    1.概述 static关键字的中文意思是静态的,该修饰符可以修饰字段.方法.内部类.使用该关键字修饰的内容,在面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的 ...

  3. python安装方法_【Python教程】Windows10 安装Python

    在此教程中,我们将学习一步一步在windows10 系统安装Python环境. 首先访问官网: https://www.python.org/downloads/ 点击下载,下载安装包.双击后有两个选 ...

  4. python selenium 下拉列表_从下拉列表中选择python selenium选项

    我试图使用下面的代码使用selenium(python)从网页上的下拉列表中选择一个选项.在from selenium import webdriver from selenium.webdriver ...

  5. java中日期比较方法_在java中进行日期时间比较的4种方法

    1. Date.compareTo() java.util.Date 提供了在 Java 中比较两个日期的经典方法compareTo(). 如果两个日期相等,则返回值为0. 如果Date在date参数 ...

  6. python临床数据_从临床试验中获取数据

    我正在开发一个小Python函数来从clinicalTrials.gov中获取数据.从每个研究记录中,我想从中找出研究的目标条件.例如,对于this研究记录,我需要以下内容:conditions = ...

  7. python注入进程_向进程中注入Python代码

    我想把Python代码注入到一个进程中,当它注入时,它似乎会使我的进程崩溃.我没有在我自己的程序中得到任何错误,但目标进程停止工作.被调用的非托管api没有给我任何错误,并且似乎已经正确地执行了它们的 ...

  8. 不属于python语言保留字_以下选项中,不属于Python保留字的是( )_学小易找答案...

    [判断题]用摆式仪测试摆值同一处平行测定不少于3次,3个测点间距2~5m.( ) [单选题]下面是单拍子的是 [填空题]假设列表对象 aList 的值为 [3,4,5,6,7,9,11,13,15,1 ...

  9. 3_1符合python语言变量_以下选项中符合Python语言变量命名规则的是

    [单选题]以下选项中,不是Python语言特点的是 [单选题]较小的尺寸应离轮廓线较近,较大的尺寸线离轮廓线较远.( ) [单选题]关于Python语言的变量,以下选项中说法正确的是 [单选题]182 ...

最新文章

  1. 投影参数_智能投影仪参数如何去看,其实很简单
  2. img summernote 加类_控制好情绪 的动态 - SegmentFault 思否
  3. mysql t-sql,将T-SQL转换为MySQL
  4. 如何在 GPU 上加速数据科学
  5. expect switch 多条件_JavaScript-流程控制语句:选择结构(if和switch)
  6. 移动WEB的页面布局
  7. Linux 文本格式显示折线图,linux 折线图
  8. 又发现一个visual studio 2015的坑啊。
  9. python烟花表白_python炫酷烟花表白源代码
  10. 新建第一个windows服务(Windows Service)
  11. Codeforces Round #434 (Div. 2)【A、B、C、D】
  12. 【计算机组成原理】双端口RAM和多模块存储器
  13. c语言求员工的平均分数,用C语言编程平均分数
  14. mysql 释放行锁_《深入精通Mysql(三)》深入底层Mysql各种锁机制(面试必问)...
  15. 用matlab仿真0到9十个数字的语音识别
  16. python3 获取文件目录_python3--os.path获取当前文件的绝对路径和所在目录
  17. dts双轨制会员积分系统,直销系统,分销系统
  18. 读后感__局外人_知其不可而为之
  19. 图像处理(8)–灰度变换函数增强空间域图像
  20. 《啤酒与尿布》之读感

热门文章

  1. work-notes(8):如何制作卡片凹陷?如何制作梯形?如何制作有凹陷的盒子?如何制作透明凹陷?
  2. 前馈神经网络公式推导
  3. web前端全栈0基础到精通(祺)vue 03
  4. python技术栈全景图_程序员之数据分析Python技术栈
  5. 2022最新自动化测试面试题精选
  6. java keytool证书,java keytool 安全证书学习
  7. “Windows 资源保护找到了损坏文件但无法修复其中某些文件”的问题
  8. 关于CSGO队友不给听音乐盒,我自己用Python爬虫下载全部音乐盒的这件事
  9. Python中用print函数输出
  10. java基础-IO编程