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的理解相关推荐

  1. python 打印数组变量_使用Python将数组的元素导出到变量中(unpacking)

    下面就为大家分享一篇使用Python将数组的元素导出到变量中(unpacking),具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 最近工作中遇到一个问题,需要利用Python将数组(list ...

  2. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  3. python字符串去掉空行_从python中的字符串中删除空格

    python字符串去掉空行 如何在python中删除字符串中的空格 (How to remove whitespaces in a string in python) str.lstrip()str. ...

  4. python怎么更新数据库_在Python的Django框架中更新数据库数据的方法

    先使用一些关键参数创建对象实例,如下: >>> p = Publisher(name='Apress', ... address='2855 Telegraph Ave.', ... ...

  5. python整数转换字符串_使用Python中的str()函数将整数值转换为字符串

    python整数转换字符串 Given an integer value and we have to convert the value to the string using str() func ...

  6. 以下选项中python用于异常处理结构_《Python 程序设计》复习题

    目录 填空题 一.基础知识 二.序列 三.选择结构与循环结构和函数及面向对象.文件 选择题 一.Python 基础语法 二.基本数据类型 三.程序的控制结构 四.函数和代码复用 五.组合数据类型 六. ...

  7. 熊猫的python小课账号_学习python中的pandas有没有好的教程推荐?

    之前好多人私信我python数据分析怎么快速入门,我在这里直接介绍一下自己的心得经验吧. 要学习pandas,我并不建议看大量的教程,等看完教程,天都黑了,一觉醒来热情都凉了. 我的建议是,首先放平心 ...

  8. python常用语法和示例_使用Python中的示例进行输入和输出操作

    python常用语法和示例 A Program needs to interact with the user to accomplish the desired task; this is done ...

  9. python正则匹配统计_用Python正则表达式搜索统计命令行管道中的所有数字

    由于最近经常要对庞大的Android代码进行统计,于是写了一个Python脚本,可以把命令行中输出的所有管道数据中的数字找出来,并进行累加等操作,使用起来非常快捷高效. 例如,我希望统计Android ...

最新文章

  1. python教学研究_Python程序设计课程教学研究
  2. android组件通讯 Intent- 系统标准的Activity Action应用
  3. mysql数据库未启动失败_mysql数据库启动失败
  4. Serverless 落地之痛怎么解?
  5. 8个适合用来练手的SpringBoot开源项目
  6. 陇东学院c语言程序设计,C语言程序设计
  7. 通过模板页master page和主题theme来实现网站的风格切换
  8. 关于数据库的设计的一点思路
  9. c/s架构nginx+php-fpm通信原理
  10. 简单获取PNG免扣素材,提升设计效率
  11. Android软件安全开发实践(下)
  12. Android源码中添加 修改应用
  13. 程序员如何高性能排序多个文件?
  14. FFA 2021 专场解读 - 开源解决方案 / 流批一体
  15. Linux 常用系统工具与初始化配置
  16. Unity3D 5.3 新版AssetBundle使用方案及策略
  17. 使用Elcomsoft Advanced Office Password Recovery对Office文档进行密码恢复
  18. 电脑唯独搜不到自己家wifi,怎么办?
  19. wxpython中表格顶角怎么设置_当wxGrid中的某个单元格以编程方式更改时,突出显示该行中的一行(使用wxPython)...
  20. php判断pad访问,JS判断是否手机或pad访问实现方法

热门文章

  1. 基于51单片机的8路抢答器proteus仿真 汇编语言程序设计
  2. Ag-Grid动态渲染列
  3. [编程基础] Python数据生成库Faker总结
  4. 万字梳理计算机网络(最全)
  5. python-GIL、死锁递归锁及线程补充
  6. 跨越40多年的“以太”风云,了解一下?
  7. python之基础训练题
  8. Codeup墓地 Contest100000583 问题 C:神奇的口袋
  9. 【Python】抓取淘宝列表页信息
  10. alertdialog 自定义样式回调选手_日志MIUI 10 9.8.7 内测更新资讯 小米8自定义水印...