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及普通函数的区别的更多相关文章

  1. python中的str和repr函数的区别

    看了一些网上的解释,最主流的解释是“str是给人看的,repr是给机器看的”,如果已经理解了的,这句话是对的,但是是有问题的,对于没懂的,这句话是无法理解的. 我来尝试解释一下.先直译一下官方文档: ...

  2. 基于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 ...

  3. 【python】Python 中的 classmethod 和 staticmethod

    Python 中的 classmethod 和 staticmethod 有什么具体用途? 推荐地址:http://www.cnblogs.com/wangyongsong/p/6750454.htm ...

  4. Python中的__init__()和__call__()函数

    Python中的__init__()和__call__()函数 在Python的class中有一些函数往往具有特殊的意义.__init__()和__call__()就是class很有用的两类特殊的函数 ...

  5. 关于Python中的classmethod

    Python 中的 classmethod classmethod: 作用是直接将自己的类对象,传给类方法. 一.classmethod 1)不用classmethod的时候 你的代码可能是这样写的, ...

  6. python中实现延时回调普通函数示例代码

    python中实现延时回调普通函数示例代码 这篇文章主要给大家介绍了关于python中实现延时回调普通函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的 ...

  7. Python中的startswith和endswith函数使用实例

    Python中的startswith和endswith函数使用实例 在Python中有两个函数分别是startswith()函数与endswith()函数,功能都十分相似,startswith()函数 ...

  8. Python中的"缝合器"zip函数:将多个可迭代对象组合成一个迭代器

    zip函数将参数中多个可迭代对象中相同序号的元素取出组合成一个元组作为输出列表的一个同样序号的元素,即输出列表的每个元素是一个元组,该元组的元素来源于参数中每个迭代对象的对应序号的元素. 具体可参考: ...

  9. python中dtype,type,astype的区别

    python中dtype,type,astype的区别 type() dtype() astype() 函数名称 用法 type 返回参数的数据类型 dtype 返回数组中元素的数据类型 astype ...

随机推荐

  1. leetcode 之 Unique Paths

    Unique Paths A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagra ...

  2. 深入探讨 Java 类加载器[转]

    原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-classloader/index.html 类加载器(class loader)是 Java™ ...

  3. 如何使用 RMAN 异构恢复一些表空间

    在oracle 在日常维护的数据库中难免会遇到误删数据和使用(drop.delete. truncate)当我们使用常规手段(flashback query .flashback drop)当数据不能 ...

  4. linux_apt-get 使用详解

    安装应用从互联网上下载查询时 用到,今天安装个 mysql 简化流程如下: apt-cache search mysql-server sudo apt-get install mysql-serve ...

  5. 杭电dp题集,附链接还有解题报告!!!!!

    Robberies 点击打开链接 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱  最脑残的是把总的概率以为是抢N家银行的概率之和- 把状态转移方程写成了f ...

  6. 工作流Jpbm4.4工作流知识点总结(工作流开发宝典)

    原文:工作流Jpbm4.4工作流知识点总结(工作流开发宝典) Jbpm工作流开发过程中的一些知识点总结,方便以后开发使用! 目录: 一.工作流框架的搭建 二.工作流框架的流程开发 1.管理流程定义 ① ...

  7. Java-继承特性

    继承的特点: 1.提高了代码的复用性. 2.让类与类之间发生了关系,有了这个关系,才有了多态的特性. (注意:千万不要为了获取其他类的功能,简化代码而继承:必须是类与类之间有所属关系才可以继承,所属关 ...

  8. c# p2p 穿透(源码加密)

    http://blog.oraycn.com/ESFramework_Demo_P2P.aspx 测试,完全OK!  我很喜欢这个.可以源码是加密的!我希望实现 web 版本的p2p视频观看,aehy ...

  9. Asp.Net MVC5入门学习系列④

    原文:Asp.Net MVC5入门学习系列④ 添加Model且简单的使用EF 对于EF(EntityFramework)不了解的朋友可以去百度文科或者在园子里搜一些简资源看下,假如和我一样知道EF的概 ...

  10. 【剑指offer】二叉搜索树转双向链表

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26623795 题目描写叙述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表. ...