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 ...
随机推荐
- 1、Java数据类型
1.基本数据类型的变量: /** * 1.基本数据类型的变量: * * 1).整数类型:byte(1字节=8bit),short(2字节),int(4字节),long(8字节) * * 2).浮点数类 ...
- [深度学习] tf.keras入门4-过拟合和欠拟合
过拟合和欠拟合 简单来说过拟合就是模型训练集精度高,测试集训练精度低:欠拟合则是模型训练集和测试集训练精度都低. 官方文档地址为 https://tensorflow.google.cn/tutori ...
- 一文了解华为FusionInsight MRS HBase的集群隔离方案RSGroup
摘要: RSGroup是集群隔离方案. 本文分享自华为云社区<华为FusionInsight MRS HBase的集群隔离--RSGroup>,作者: MissAverage. 一.HBa ...
- 01-Verilog基础
Verilog RTL编程实践 在进行数字IC设计过程中,RTL coding能力是非常重要的.结合逻辑仿真(VCS)和逻辑综合(Design Compiler)工具.看RTL. 1 ASIC Des ...
- Golang编译
SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build main.go SET CGO_ENABLED=0 SET GOOS=linux ...
- 【分析笔记】SiliconLabs EFR32BG22 Bluetooth Mesh SensorClient 源码分析
硬件环境: SLTB010A(BRD4184A Rev A02 / EFR32BG22C224F512IM40) 软件环境: SimplicityStudio5/gecko_sdk_3.2.3 分析工 ...
- 从历代GC算法角度刨析ZGC
作者:京东科技 文涛 前言 本文所有介绍仅限于HotSpot虚拟机, 本文先介绍了垃圾回收的必要手段,基于这些手段讲解了历代垃圾回收算法是如何工作的, 每一种算法不会讲的特别详细,只为读者从算法角度理 ...
- docker-01基本介绍
1.docker出现的背景原因 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代后 ...
- Ubuntu18.4安装g2o
1.安装依赖项: sudo apt-get install cmake libeigen3-dev libsuitesparse-dev qtdeclarative5-dev qt5-qmake li ...
- react中redux怎么使用
一.redux是什么? redux 就是react 全局状态管理,作用是存放全局数据 二.核心 state:存放数据 reducer:修改仓库数据 是一个函数,参数一:仓库中的数据,参数2:行为 ac ...