python中staticmethod classmethod及普通函数的区别

简介: http://genggeng.iteye.com/blog/1290458 staticmethod 基本上和一个全局函数差不多,只不过可以通过类或类的实例对象(python里光说对象总是容易产生混淆, 因为什么都是对象,包括类,而实际上类实例对象才是对应静态语言中所谓对象的东西)来调用而已, 不会隐式地传入任何参数。
http://genggeng.iteye.com/blog/1290458

staticmethod 基本上和一个全局函数差不多,只不过可以通过类或类的实例对象(python里光说对象总是容易产生混淆, 因为什么都是对象,包括类,而实际上类实例对象才是对应静态语言中所谓对象的东西)来调用而已, 不会隐式地传入任何参数。这个和静态语言中的静态方法比较像。


classmethod 是和一个class相关的方法,可以通过类或类实例调用,并将该class对象(不是class的实例对象)隐式地 当作第一个参数传入。就这种方法可能会比较奇怪一点,不过只要你搞清楚了python里class也是个真实地 存在于内存中的对象,而不是静态语言中只存在于编译期间的类型。


正常的方法就是和一个类的实例对象相关的方法,通过类实例对象进行调用,并将该实例对象隐式地作为第一 个参数传入,这个也和其它语言比较像。


可如下示例:


Python代码   收藏代码
  1. #!/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:


Shell代码   收藏代码
  1. 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  
目录
相关文章
|
2天前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
3天前
|
机器学习/深度学习 人工智能 安全
python和Java的区别以及特性
Python:适合快速开发、易于维护、学习成本低、灵活高效。如果你需要快速上手,写脚本、数据处理、做点机器学习,Python就是你的首选。 Java:适合大型项目、企业级应用,性能要求较高的场景。它类型安全、跨平台能力强,而且有丰富的生态,适合更复杂和规模化的开发。
14 3
|
15天前
|
Python
python 函数
【9月更文挑战第4天】python 函数
34 5
|
20天前
|
Python
Python 中 help() 和 dir() 函数的用法
【8月更文挑战第29天】
18 5
|
20天前
|
存储 测试技术 Python
Python 数组和列表有什么区别?
【8月更文挑战第29天】
25 4
|
21天前
|
C++ Python
python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用
python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用
12 1
|
21天前
|
Python
Python eval()函数的使用
Python eval()函数的使用
18 1
|
1天前
|
Unix 编译器 C语言
[oeasy]python034_计算机是如何认识abc的_ord函数_字符序号_ordinal_
[oeasy]python034_计算机是如何认识abc的_ord函数_字符序号_ord
8 0
|
15天前
|
数据采集 自然语言处理 数据挖掘
python查询汉字函数
简洁、高效、易懂的代码对于提高开发效率与项目质量至关重要,并且对于维持代码的可读性和可维护性也有着很大帮助。选择正确的工具和方法可以大幅提升处理中文数据的效率。在编写用户定义函数时,明确函数的功能与返回值类型对于函数的复用和调试也同样重要。当涉及到复杂的文本处理或数据分析时,不宜过分依赖单一的工具或方法,而应根据具体需求灵活选择和组合不同的技术手段。
22 0
WK
|
16天前
|
图计算 开发者 Python
python中的函数有哪些用途
Python中的函数具有多种用途,它们极大地增强了代码的复用性、可读性和可维护性。
WK
10 0