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【力扣LeetCode算法题库】35- 搜索插入位置
  2. JVM与Dalvik
  3. 001_Servlet简介
  4. cpuz北桥频率和内存频率_内存频率怎样计算,一分钟教会你
  5. OpenGL Gouraud着色法的实例
  6. 50佳设计独特的名片设计欣赏(上篇)
  7. windows 安装yaml支持和pytest支持等
  8. jieba源码分析(二)
  9. 做老板必须要有正气和底气,所谓正气就是身正不怕影子斜
  10. IOS 杂笔-14(被人遗忘的owner)
  11. 进程调度算法--时间片轮转算法
  12. 中美线径对照表_AWG 与国际线径对照表
  13. CAD教程:CAD自定义菜单和工具栏的操作技巧
  14. Mac动态桌面壁纸Dynamic Wallpaper惊艳你的桌面
  15. 关于java Stream流将list集合分组之后与原list的集合的顺序不一致的问题
  16. 名帖292 张瑞图 行书《论书卷》
  17. 用数据说话,看中国49个地方(省、市、高新区)集成电路产业实力情况
  18. Windows系统下载
  19. 【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(4)!
  20. xilinx基础篇Ⅱ(9)Prj5 ILA的使用

热门文章

  1. 2021-06-20活期账目储蓄管理系统
  2. Unable to decode stream: java.io.FileNotFoundException: 虎头:
  3. 京东电器“220V带电新人类”:找寻狂拽炫酷吊炸天的科技感
  4. 洛奇 服务器文件,《洛奇Mabinogi》官方网站
  5. 玩转ECharts制作图表之折线图
  6. 爱奇艺推荐中台探索与实践 附下载
  7. C生万物 | 常量指针和指针常量的感性理解
  8. Windows小技巧
  9. 基于qt和sqlite实现的简易点餐系统
  10. 采集练习(六) python获得chrome扩展 微度新标签页 下的云壁纸