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的更多相关文章

  1. 解决PNG图片在IE6中背景不透明方法_解决IE6中PNG背

    解决PNG图片在IE6中背景不透明方法_解决IE6中PNG背   目录 解决代码 解决png图片在html中 解决png作为网页背景-css 1.解决PNG图片在IE6中背景不透明的CSS与JS代码 ...

  2. python常见的函数和类方法

    在学python编程时 常常会遇到些常见的函数 记录学习 1. getattr函数 """ getattr() 函数用于返回一个对象属性值. 语法: getattr(ob ...

  3. Python join()方法

    描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str.join(sequence) 参数 sequence -- 要连接的 ...

  4. python join()方法的使用,可以应用到tcp压测发送指定数据长度的应用

    Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串.其中,序列中的元素应是字符串类型. 学习join()方法主要是为了配合随机数的使用,生产某个指定位数的随机数,在t ...

  5. Python 属性方法、类方法、静态方法、 特殊属性__doc__ (内建属性)

    总结:和类的关联性讲:属性方法>类方法>静态方法 属性方法@property:仅仅是调用方式不用+括号. 类方法@classmethod:访问不了累的属性变量,只可以访问类变量. 静态方法 ...

  6. python基础教程_学习笔记11:魔法方法、属性和迭代器

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/31417309 魔法方法.属性和迭代器 在pyth ...

  7. python中的cls到底指的是什么

    python中的cls到底指的是什么,与self有什么区别? 2018年07月31日 11:13:09 rs勿忘初心 阅读数:7769   作者:秦风链接:https://www.zhihu.com/ ...

  8. Python子类方法的调用(类方法)

    class S(object): def Test(self): print("TEST") @classmethod def Test02(cls): print("c ...

  9. Python学习之---Python中的内置函数(方法)(更新中。。。)

    add(item)   #将item添加到s中,如果item已经在s中,则无任何效果 break        #退出循环,不会再运行循环中余下的代码 bool()     #将参数转换为布尔型 by ...

  10. Python普通方法、静态方法、类方法

    开始 # -*-coding:utf-8-*- # 普通方法,类方法,静态方法的区别 __metaclass__ = type class Tst: name = 'tst' data = 'this ...

随机推荐

  1. Pytorch框架详解之一

    Pytorch基础操作 numpy基础操作 定义数组(一维与多维) 寻找最大值 维度上升与维度下降 数组计算 矩阵reshape 矩阵维度转换 代码实现 import numpy as np a = ...

  2. uniapp中请求接口问题

    在main.js文件中配置: //Vue.prototype.$baseUrl="http://192.168.1.164/api" //线下接口 Vue.prototype.$b ...

  3. 过滤器 Filter 与 拦截器 Interceptor 的区别

    引言 说起 Filter 与 Interceptor 的区别,相信很多同学第一感觉就是容易.简单! 毕竟开发中这两个组件使用频率较高,用法也较简单.然后真回答起来有答不出个所以然来,场面尴尬,老丢脸了 ...

  4. 对一个序列双重argsort的含义

    学习笔记:由numpy.argsort()引发的思考 一.numpy.argsort() 函数定义 函数的定义 首先函数的定义比较简洁: argsort()函数是将x中的元素从小到大排列,提取其对应的 ...

  5. WPF开发经验-实现一种三轴机械手控件

    一 引入 考虑实现一种三轴机器人控件. 三轴机器人用来将某种工件从一个位置运送到另一个位置. 其X轴为手臂轴,可以正向和反向运动,它处于末端,直接接触工件: 其T轴为旋转轴,可以对手臂进行旋转: 其Z ...

  6. 使用字节流丢读取中文的问题-Reader类

    使用字节流丢读取中文的问题 当使用字节流读取文本文件时,可能会有一个小问题.就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储.所以Java提供一些字符流类,以字符为 ...

  7. 12月7日内容总结——jQuery查找标签、操作标签、事件和动画效果,Bootstrap页面框架的介绍和使用讲解

    目录 一.jQuery查找标签 基本选择器 层级选择器 基本筛选器 属性选择器 表单筛选器 筛选器方法 二.操作标签 样式操作(class操作) 位置操作 尺寸 文本操作 创建标签 属性操作 文档处理 ...

  8. C#反射运行该类下的方法

    Text:反射的类名 s:方法名 data:参数 如果无参则: (string)method.Invoke(obj, null); Type type = typeof(Text); MethodIn ...

  9. C-02\规范及随机数rand()原理

    小知识点 assert()函数 assert 断言函数,用于在调试过程中捕捉程序的错误.对某种假设条件进行检测,如果条件成立就不进行任何操作,如果条件不成立就捕捉到这种错误,并打印出错误信息,终止程序 ...

  10. composer 安装 laravel指定版本

    composer 安装 laravel指定版本 $ composer create-project --prefer-dist laravel/laravel notelog '7.*'