python cls方法_关于类方法中的cls
title: python cls方法_关于类方法中的cls
author: 杨晓东
permalink: python cls方法_关于类方法中的cls
date: 2021-10-02 11:27:04
categories:
- 有趣
tags:
- 奇怪的知识
python cls方法_关于类方法中的cls
描述:
在python的类方法中,默认使用的第一个参数是cls,而在实例方法中,一般使用self作为第一个参数
两处比较:
(1) 比较一般类方法中的 self 和 cls 的区别:
一般来说,使用某个类的方法,需要先将类实例化,赋予一个对象才可以调用类中的方法,但是如果使用了@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 = A()
a.foo1('ma') # output:hello ma
A.foo1('ma') # output:hello ma
'''
而foo2是常规函数,只能通过类的实例化来调用,即a.foo2()来调用。
'''
a.foo2('杨晓东') # output:hello 杨晓东
'''
而foo3是类函数,cls作为第一个参数用来表示类本身,在类方法中用到,类方法只是与类本身有关而与实例无关的方法。
可以通过实例化来调用,也可以通过 类名.类函数名 来调用。
即 a.foo3('mam') 或 A.foo3('mam')
'''
a.foo3('mam') # output:hello mam
A.foo3('mam') # output:hello mam
(2) staticmethod 和 classmethod方法的区别:
在classmethod中可以调用类中定义的其他方法、类的属性,但staticmethod只能通过A.a调用类的属性,但无法通过在该函数内部调用A.foo2()。
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)
print(cls().foo2('杨晓东')) # 可以在foo3中调用foo2,因为持有cls参数,彷佛是类本身,故可以调用该foo2方法。
print(A.a) # output:a
print(A.foo3('杨晓东3')) # output:hello 杨晓东3
# output:hello 杨晓东
B = A() # 实例化类
print(B.foo2('杨晓东2')) # output:hello 杨晓东2 普通类方法,实例化后正常调用&输出
print(A.foo2('杨晓东22')) # 因为没有实例化类 报错: unbound method foo2() must be called with A instance as first argument (got str instance instead)
第三点是关于cls(),其实这就是类本身,比如这里的cls()=A,如果cls()里面有参数,那么这个参数就是构造函数init(self,parameter1,parameter2)中的参数1,2,同时还是表示类本身。
举例:

python cls方法_关于类方法中的cls的更多相关文章
- 解决PNG图片在IE6中背景不透明方法_解决IE6中PNG背
解决PNG图片在IE6中背景不透明方法_解决IE6中PNG背 目录 解决代码 解决png图片在html中 解决png作为网页背景-css 1.解决PNG图片在IE6中背景不透明的CSS与JS代码 ...
- python常见的函数和类方法
在学python编程时 常常会遇到些常见的函数 记录学习 1. getattr函数 """ getattr() 函数用于返回一个对象属性值. 语法: getattr(ob ...
- Python join()方法
描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str.join(sequence) 参数 sequence -- 要连接的 ...
- python join()方法的使用,可以应用到tcp压测发送指定数据长度的应用
Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串.其中,序列中的元素应是字符串类型. 学习join()方法主要是为了配合随机数的使用,生产某个指定位数的随机数,在t ...
- Python 属性方法、类方法、静态方法、 特殊属性__doc__ (内建属性)
总结:和类的关联性讲:属性方法>类方法>静态方法 属性方法@property:仅仅是调用方式不用+括号. 类方法@classmethod:访问不了累的属性变量,只可以访问类变量. 静态方法 ...
- python基础教程_学习笔记11:魔法方法、属性和迭代器
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/31417309 魔法方法.属性和迭代器 在pyth ...
- python中的cls到底指的是什么
python中的cls到底指的是什么,与self有什么区别? 2018年07月31日 11:13:09 rs勿忘初心 阅读数:7769 作者:秦风链接:https://www.zhihu.com/ ...
- Python子类方法的调用(类方法)
class S(object): def Test(self): print("TEST") @classmethod def Test02(cls): print("c ...
- Python学习之---Python中的内置函数(方法)(更新中。。。)
add(item) #将item添加到s中,如果item已经在s中,则无任何效果 break #退出循环,不会再运行循环中余下的代码 bool() #将参数转换为布尔型 by ...
- Python普通方法、静态方法、类方法
开始 # -*-coding:utf-8-*- # 普通方法,类方法,静态方法的区别 __metaclass__ = type class Tst: name = 'tst' data = 'this ...
随机推荐
- go_xml_learn
结构体转换为xml: type Person struct { XMLName xml.Name `xml:"person"` Name string `xml:"nam ...
- ssm——spring整理
目录 1.概述 2.Spring工厂与IOC 2.1.为什么要有Spring框架 2.2.什么是IOC 2.Spring工厂对实例注入 2.1.使用标签进行注入 2.2.使用注解进行注入 2.2.3. ...
- 内网渗透-smb&wmi明文&hash传递
首先我们要知道,在windows2012以上版本默认会关闭wdigest,那么攻击者就无法从内存中获取明文密码了 windows2012以下的版本如果安装了KB2871997补丁,那么同样也会导致无法 ...
- TensorRT基础笔记
一,概述 TensorRT 是 NVIDIA 官方推出的基于 CUDA 和 cudnn 的高性能深度学习推理加速引擎,能够使深度学习模型在 GPU 上进行低延迟.高吞吐量的部署.采用 C++ 开发,并 ...
- 创建a标签使用get请求下载文件
创建a标签使用get请求下载文件 let url = `${BaseUrl.path}/aa/bb/cc?no=${this.sqcode}&pae=${this.wlName}&as ...
- PHP转Go实践:xjson解析神器「开源工具集」
前言 近期会更新一系列开源项目的文章,新的一年会和大家做更多的开源项目,也欢迎大家加入进来. xutil 今天分享的文章源自于开源项目jinzaigo/xutil的封装. 在封装过程中,劲仔将实现原理 ...
- VUEX 使用学习五 : getter
转载请注明出处: Getter对Store中的数据进行加工处理形成新的数据.他不会修改state中的原始数据,起到的是包装数据的作用: 有时我们需要从 store 中的 state 中派生出一些状态, ...
- docker配置阿里云加速
登录阿里云找到镜像加速 搜索容器镜像服务,进入管理控制台 找到镜像加速器,根据下面配置好即可 centos7.7x64例子 sudo mkdir -p /etc/docker sudo tee /et ...
- java入门与进阶P-5.5+P-5.6
投票统计 写一个程序,输入数量不确定的[0,9]范围内的整数,统计每一中数字出现的次数,输入-1表示结束 循环遍历 通常都是使用for循环,让循环变量i从0到<数组的length,这样循环体内最 ...
- Python第三方库arrow
Python第三方库arrow https://pypi.org/project/arrow/ 简介 处理时间日期的一个第三方库 Arrow is a Python library that offe ...