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教学研究_Python程序设计课程教学研究
- android组件通讯 Intent- 系统标准的Activity Action应用
- mysql数据库未启动失败_mysql数据库启动失败
- Serverless 落地之痛怎么解?
- 8个适合用来练手的SpringBoot开源项目
- 陇东学院c语言程序设计,C语言程序设计
- 通过模板页master page和主题theme来实现网站的风格切换
- 关于数据库的设计的一点思路
- c/s架构nginx+php-fpm通信原理
- 简单获取PNG免扣素材,提升设计效率
- Android软件安全开发实践(下)
- Android源码中添加 修改应用
- 程序员如何高性能排序多个文件?
- FFA 2021 专场解读 - 开源解决方案 / 流批一体
- Linux 常用系统工具与初始化配置
- Unity3D 5.3 新版AssetBundle使用方案及策略
- 使用Elcomsoft Advanced Office Password Recovery对Office文档进行密码恢复
- 电脑唯独搜不到自己家wifi,怎么办?
- wxpython中表格顶角怎么设置_当wxGrid中的某个单元格以编程方式更改时,突出显示该行中的一行(使用wxPython)...
- php判断pad访问,JS判断是否手机或pad访问实现方法
热门文章
- 基于51单片机的8路抢答器proteus仿真 汇编语言程序设计
- Ag-Grid动态渲染列
- [编程基础] Python数据生成库Faker总结
- 万字梳理计算机网络(最全)
- python-GIL、死锁递归锁及线程补充
- 跨越40多年的“以太”风云,了解一下?
- python之基础训练题
- Codeup墓地 Contest100000583 问题 C:神奇的口袋
- 【Python】抓取淘宝列表页信息
- alertdialog 自定义样式回调选手_日志MIUI 10 9.8.7 内测更新资讯 小米8自定义水印...