python cls什么意思_对于python中的self,cls,decorator的理解
1. self, cls 不是关键字
在python里面,self, cls 不是关键字,完全可以使用自己写的任意变量代替实现一样的效果
代码1
class MyTest:
myname = 'peter'
def sayhello(hello):
print "say hello to %s" % hello.myname
if __name__ == "__main__":
MyTest().sayhello()
代码1中, 用hello代替掉了self, 得到的是一样的效果,也可以替换成java中常用的this.
结论
: self和cls只是python中约定的写法,本质上只是一个函数参数而已,没有特别含义。
任何对象调用方法都会把把自己作为该方法中的第一个参数,传递到函数中。(因为在python中万物都是对象,所以当我们使用Class.method()的时候,实际上的第一个参数是我们约定的cls)
2. 类的定义可以动态修改
代码2
class MyTest:
myname = 'peter'
def sayhello(self):
print "say hello to %s" % self.myname
if __name__ == "__main__":
MyTest.myname = 'hone'
MyTest.sayhello = lambda self,name: "I want say hello to %s" % name
MyTest.saygoodbye = lambda self,name: "I do not want say goodbye to %s" % name
print MyTest().sayhello(MyTest.myname)
print MyTest().saygoodbye(MyTest.myname)
这里修改了MyTest类中的变量和函数定义, 实例化的instance有了不同的行为特征。
3. decorator
decorator是一个函数, 接收一个函数作为参数, 返回值是一个函数
代码3
def enhanced(meth):
def new(self, y):
print "I am enhanced"
return meth(self, y)
return new
class C:
def bar(self, x):
print "some method says:", x
bar = enhanced(bar)
上面是一个比较典型的应用
以常用的@classmethod为例
正常的使用方法是
代码4
class C:
@classmethod
def foo(cls, y):
print "classmethod", cls, y
这里有个疑惑的地方,不是很明白: 如果一个方法没有使用@classmethod, 那么用Class.method()的方式,是会报错的。但是@classmethod是个decorator, 那么它返回的也是一个函数,为什么这样就可以直接被Class调用了呢?
0
顶
1
踩
分享到:
2009-07-11 04:37
浏览 1463
评论
python cls什么意思_对于python中的self,cls,decorator的理解相关推荐
- python 打印数组变量_使用Python将数组的元素导出到变量中(unpacking)
下面就为大家分享一篇使用Python将数组的元素导出到变量中(unpacking),具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 最近工作中遇到一个问题,需要利用Python将数组(list ...
- python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议
<Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: <Python之禅>中对于Pyt ...
- python字符串去掉空行_从python中的字符串中删除空格
python字符串去掉空行 如何在python中删除字符串中的空格 (How to remove whitespaces in a string in python) str.lstrip()str. ...
- python怎么更新数据库_在Python的Django框架中更新数据库数据的方法
先使用一些关键参数创建对象实例,如下: >>> p = Publisher(name='Apress', ... address='2855 Telegraph Ave.', ... ...
- python整数转换字符串_使用Python中的str()函数将整数值转换为字符串
python整数转换字符串 Given an integer value and we have to convert the value to the string using str() func ...
- 以下选项中python用于异常处理结构_《Python 程序设计》复习题
目录 填空题 一.基础知识 二.序列 三.选择结构与循环结构和函数及面向对象.文件 选择题 一.Python 基础语法 二.基本数据类型 三.程序的控制结构 四.函数和代码复用 五.组合数据类型 六. ...
- 熊猫的python小课账号_学习python中的pandas有没有好的教程推荐?
之前好多人私信我python数据分析怎么快速入门,我在这里直接介绍一下自己的心得经验吧. 要学习pandas,我并不建议看大量的教程,等看完教程,天都黑了,一觉醒来热情都凉了. 我的建议是,首先放平心 ...
- python常用语法和示例_使用Python中的示例进行输入和输出操作
python常用语法和示例 A Program needs to interact with the user to accomplish the desired task; this is done ...
- python正则匹配统计_用Python正则表达式搜索统计命令行管道中的所有数字
由于最近经常要对庞大的Android代码进行统计,于是写了一个Python脚本,可以把命令行中输出的所有管道数据中的数字找出来,并进行累加等操作,使用起来非常快捷高效. 例如,我希望统计Android ...
最新文章
- python【力扣LeetCode算法题库】35- 搜索插入位置
- JVM与Dalvik
- 001_Servlet简介
- cpuz北桥频率和内存频率_内存频率怎样计算,一分钟教会你
- OpenGL Gouraud着色法的实例
- 50佳设计独特的名片设计欣赏(上篇)
- windows 安装yaml支持和pytest支持等
- jieba源码分析(二)
- 做老板必须要有正气和底气,所谓正气就是身正不怕影子斜
- IOS 杂笔-14(被人遗忘的owner)
- 进程调度算法--时间片轮转算法
- 中美线径对照表_AWG 与国际线径对照表
- CAD教程:CAD自定义菜单和工具栏的操作技巧
- Mac动态桌面壁纸Dynamic Wallpaper惊艳你的桌面
- 关于java Stream流将list集合分组之后与原list的集合的顺序不一致的问题
- 名帖292 张瑞图 行书《论书卷》
- 用数据说话,看中国49个地方(省、市、高新区)集成电路产业实力情况
- Windows系统下载
- 【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(4)!
- xilinx基础篇Ⅱ(9)Prj5 ILA的使用
热门文章
- 2021-06-20活期账目储蓄管理系统
- Unable to decode stream: java.io.FileNotFoundException: 虎头:
- 京东电器“220V带电新人类”:找寻狂拽炫酷吊炸天的科技感
- 洛奇 服务器文件,《洛奇Mabinogi》官方网站
- 玩转ECharts制作图表之折线图
- 爱奇艺推荐中台探索与实践 附下载
- C生万物 | 常量指针和指针常量的感性理解
- Windows小技巧
- 基于qt和sqlite实现的简易点餐系统
- 采集练习(六) python获得chrome扩展 微度新标签页 下的云壁纸