python中staticmethod classmethod及普通函数的区别
staticmethod 基本上和一个全局函数差不多,只不过可以通过类或类的实例对象
(python里光说对象总是容易产生混淆, 因为什么都是对象,包括类,而实际上
类实例对象才是对应静态语言中所谓对象的东西)来调用而已, 不会隐式地传入
任何参数。这个和静态语言中的静态方法比较像。
classmethod 是和一个class相关的方法,可以通过类或类实例调用,
并将该class对象(不是class的实例对象)隐式地 当作第一个参数传入。
就这种方法可能会比较奇怪一点,不过只要你搞清楚了python里class也是个真实地
存在于内存中的对象,而不是静态语言中只存在于编译期间的类型。
正常的方法 就是和一个类的实例对象相关的方法,通过类实例对象进行调用,
并将该实例对象隐式地作为第一个参数传入,这个也和其它语言比较像。
可如下示例:
#!/usr/bin/python
2.#coding:utf-8
3.
4.#author: gavingeng
5.#date: 2011-12-03 10:50:01
6.
7.class Person:
8.
9. def __init__(self):
10. print "init"
11.
12. @staticmethod
13. def sayHello(hello):
14. if not hello:
15. hello='hello'
16. print "i will sya %s" %hello
17.
18.
19. @classmethod
20. def introduce(clazz,hello):
21. clazz.sayHello(hello)
22. print "from introduce method"
23.
24. def hello(self,hello):
25. self.sayHello(hello)
26. print "from hello method"
27.
28.
29.def main():
30. Person.sayHello("haha")
31. Person.introduce("hello world!")
32. #Person.hello("self.hello") #TypeError: unbound method hello() must be called with Person instance as first argument (got str instance instead)
33.
34. print "*" * 20
35. p = Person()
36. p.sayHello("haha")
37. p.introduce("hello world!")
38. p.hello("self.hello")
39.
40.if __name__=='__main__':
41. main()
output:
i will sya haha
2.i will sya hello world!
3.from introduce method
4.********************
5.init
6.i will sya haha
7.i will sya hello world!
8.from introduce method
9.i will sya self.hello
10.from hello method
python中staticmethod classmethod及普通函数的区别的更多相关文章
- python中的str和repr函数的区别
看了一些网上的解释,最主流的解释是“str是给人看的,repr是给机器看的”,如果已经理解了的,这句话是对的,但是是有问题的,对于没懂的,这句话是无法理解的. 我来尝试解释一下.先直译一下官方文档: ...
- 基于python中staticmethod和classmethod的区别(详解)
例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 class A(object): def foo(self,x): print "executing foo ...
- 【python】Python 中的 classmethod 和 staticmethod
Python 中的 classmethod 和 staticmethod 有什么具体用途? 推荐地址:http://www.cnblogs.com/wangyongsong/p/6750454.htm ...
- Python中的__init__()和__call__()函数
Python中的__init__()和__call__()函数 在Python的class中有一些函数往往具有特殊的意义.__init__()和__call__()就是class很有用的两类特殊的函数 ...
- 关于Python中的classmethod
Python 中的 classmethod classmethod: 作用是直接将自己的类对象,传给类方法. 一.classmethod 1)不用classmethod的时候 你的代码可能是这样写的, ...
- python中实现延时回调普通函数示例代码
python中实现延时回调普通函数示例代码 这篇文章主要给大家介绍了关于python中实现延时回调普通函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的 ...
- Python中的startswith和endswith函数使用实例
Python中的startswith和endswith函数使用实例 在Python中有两个函数分别是startswith()函数与endswith()函数,功能都十分相似,startswith()函数 ...
- Python中的"缝合器"zip函数:将多个可迭代对象组合成一个迭代器
zip函数将参数中多个可迭代对象中相同序号的元素取出组合成一个元组作为输出列表的一个同样序号的元素,即输出列表的每个元素是一个元组,该元组的元素来源于参数中每个迭代对象的对应序号的元素. 具体可参考: ...
- python中dtype,type,astype的区别
python中dtype,type,astype的区别 type() dtype() astype() 函数名称 用法 type 返回参数的数据类型 dtype 返回数组中元素的数据类型 astype ...
随机推荐
- Python 对Twitter中指定话题的Tweet基本元素的频谱分析
CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-9 @author: guaguastd @name: en ...
- 1005. 继续(3n+1)猜想 (25) (ZJUPAT 数学)
主题链接:http://pat.zju.edu.cn/contests/pat-b-practise/1005 卡拉兹(Callatz)猜想已经在1001中给出了描写叙述.在这个题目里.情况略微有些复 ...
- 程序员的Scala
C#程序员的Scala之路第九章(Scala的层级) 摘要: 1.Scala的类层级Scala里类的顶端是Any所有的类都继承Any类,Any包括以下几个通用方法:final def ==(that: ...
- OCP-1Z0-051-名称解析-文章32称号
32. Which CREATE TABLE statement is valid? A. CREATE TABLE ord_details (ord_no NUMBER(2) PR ...
- bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (二) 图片裁剪
图片裁剪参见: http://deepliquid.com/projects/Jcrop/demos.php?demo=thumbnail 一个js插件 http://www.mikes ...
- 使用flex和bison实现的sql引擎解析
因为老师要求,近期在做oceanbase存储过程的实现,在oceanbase 0.4曾经是不支持存储过程的.实现的主要步骤主要包含 1.语法解析 2.词法解析 3.详细运行语法树的步骤 如今先来说说语 ...
- inux上iptables防火墙的基本应用教程
iptables是Linux上常用的防火墙软件,下面vps侦探给大家说一下iptables的安装.清除iptables规则.iptables只开放指定端口.iptables屏蔽指定ip.ip段及解封. ...
- [ASP.NET MVC]如何定制Numeric属性/字段验证消息
原文:[ASP.NET MVC]如何定制Numeric属性/字段验证消息 对于一个Numeric属性/字段,ASP.NET MVC会自动进行数据类型的验证(客户端验证),以确保输入的是一个有效的数字, ...
- 一个简单的dom查询函数
var regid = /^#([\w-]*)$/, regClass = /^\.([\w-]*)$/, regName = /^(div|a|p|ul|li|input|select|docume ...
- 多线程下HashMap的死循环是如何产生的
前言 HashMap不是线程安全的,如果需要在多线程环境中使用Map,那么我们可以使用ConcurrentHashmap. 1.举例说明: package com.test; import java. ...