`

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

 
阅读更多

 

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

 

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

 

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

 

可如下示例:

#!/usr/bin/python
#coding:utf-8

#author:	gavingeng
#date:		2011-12-03 10:50:01 

class Person:

	def __init__(self):
		print "init"

	@staticmethod
	def sayHello(hello):
		if not hello:
			hello='hello'
		print "i will sya %s" %hello


	@classmethod
	def introduce(clazz,hello):
		clazz.sayHello(hello)
		print "from introduce method"

	def hello(self,hello):
		self.sayHello(hello)
		print "from hello method"		


def main():
	Person.sayHello("haha")
	Person.introduce("hello world!")
	#Person.hello("self.hello")	#TypeError: unbound method hello() must be called with Person instance as first argument (got str instance instead)
	
	print "*" * 20
	p = Person()
	p.sayHello("haha")
	p.introduce("hello world!")
	p.hello("self.hello")

if __name__=='__main__':
	main()

 

output:

i will sya haha
i will sya hello world!
from introduce method
********************
init
i will sya haha
i will sya hello world!
from introduce method
i will sya self.hello
from hello method
 
分享到:
评论
1 楼 prayjourney 2016-05-21  
不错   

相关推荐

    python的staticmethod与classmethod实现实例代码

    在Python中,我们有三种主要的方式来定义类的方法:普通方法(实例方法)、静态方法(staticmethod)和类方法(classmethod)。这些方法在不同的场景下有着各自的作用。 首先,普通方法(实例方法)是通过`self`...

    Python 静态方法和类方法实例分析

    在Python面向对象编程中,类方法和静态方法是两种特殊的方法,它们在使用上有各自的特点,同时也有别于实例方法。要了解类方法和静态方法,首先需要理解类属性和实例属性的概念。 类属性是属于类本身的属性,它被这...

    python面试常用的常用38题

    Python中的类可以使用装饰器@classmethod和@staticmethod来定义类方法和静态方法。classmethod可以访问类的所有实例,而staticmethod不能访问类的实例。 3. 删除列表中的重复元素 可以使用set方法或fromkeys方法来...

    Python程序设计题库

    4. 匿名函数功能受限,不适合复杂的逻辑,而普通函数能实现更复杂的功能。 程序题部分涉及文件操作和类的设计。例如,第一个程序题要求读取文件内容,通过特定规则(字母向前移动一位)加密后写入新文件。第二个...

    python面试题

    在Python中,函数参数的传递实质上是引用的传递。这与C语言中的指针类似,但又有本质的区别。Python中所有变量都是对内存中某个对象的引用。 - **不可变对象与可变对象的区别** - 不可变对象包括字符串、元组和...

    Python Attributes and Methods

    这不仅涵盖了属性的基本概念,还深入到了动态字典`__dict__`、属性访问机制以及实例与类之间的区别,这些都是Python编程中不可或缺的部分。 ### Python属性详解 #### 什么是属性? 在Python中,属性可以被理解为...

    python内置函数大全

    20. `staticmethod(), classmethod()`: 定义静态方法和类方法,这两者与普通方法的区别在于它们不接收隐含的第一个参数(self或cls)。 这只是Python内置函数的一部分,实际上还有更多功能丰富的函数等待探索。学习...

    全品教育.pdf_python面试

    4. **Python 中 classmethod 和 staticmethod 的区别** `classmethod`和`staticmethod`都是修饰器,用于定义类方法。`classmethod`接收一个额外的参数`cls`,它是调用该方法的类的引用,可以用来访问类的属性和方法...

    Python OOP类中的几种函数或方法总结

    本篇文章将总结Python OOP类中的四种主要函数或方法:实例方法、静态方法、类方法以及普通函数。 1. **实例方法**: 实例方法是与类的实例紧密关联的函数,它们通过`self`参数接收调用该方法的实例。当通过实例...

    python面向对象练习题.pdf

    它们类似于普通的函数,但属于类的一部分,可以在类内部方便地访问。 **定义:** ```python class MyClass: @staticmethod def static_method(): # 方法体 ``` **调用:** ```python MyClass.static_method() `...

    python中方法也是属性共3页.pdf.zip

    - 静态方法:使用`@staticmethod`装饰器定义,不接收`self`或`cls`参数,与类或实例无关,更像是普通的函数。 5. **方法的绑定**: - 在Python中,方法在创建类实例时自动绑定。这意味着当你访问类的实例的某个...

    深入浅析python 中的self和cls的区别

    它们就像是普通函数,只是被放在类的上下文中,便于组织代码和命名空间。例如,`A`中的`foo1`方法: ```python @staticmethod def foo1(name): print('hello', name, A.a) ``` `foo1`可以被类或实例直接调用,但...

    Python内置函数

    5. `staticmethod()`: 将普通函数转换为静态方法,静态方法不接收隐含的 `self` 参数,与类实例无关。 6. `all()`: 接收一个可迭代对象,如果所有元素都为真(非零、非空),则返回True,否则返回False。 7. `any...

    Python基础——笔试面试利器

    3. **静态方法**:不依赖于类的状态,可以当作普通的函数使用,但它必须通过类名调用。 - 示例: ```python class A: @staticmethod def static_foo(x): print("executing static_foo(%s)" % x) A.static_foo...

    10.python中的面向对象11

    - 静态方法与类或实例无关,它们像普通函数一样工作,但作为类的一部分。 - 使用`@staticmethod`装饰器定义静态方法,如`@staticmethod def some_function()`。 10. **继承**: - Python支持多重继承,允许一个...

    【python教程入门学习】Python基础学习(二).pdf

    在Python中,函数分为三种类型:普通函数、实例方法、类方法和静态方法。 1. 普通函数(foo(x)):这类函数与类和实例无关,可以直接调用,如`foo(x)`。 2. 实例方法(foo(self, x)):在类中定义的方法需要一个...

    一百道经典python初级面试题

    - 静态方法:不需要实例也不需要类引用作为第一个参数,可以像普通函数一样被调用。静态方法通常用于执行不依赖于类实例的函数。 - 类方法:以类引用作为第一个参数(通常命名为cls)。类方法可以访问类的属性和其它...

    python面试题100.docx

    - **静态方法**: 通过`@staticmethod`装饰器定义,既不绑定到类也不绑定到实例,可以当作普通函数使用。 例如: ```python class MyClass: @staticmethod def static_method(): pass @classmethod def class_...

    python面向对象学习总结.pdf

    静态方法是类中的一个普通函数,通常用于执行与类相关但不依赖于类属性的操作。 6. 方法继承和重写(Method Inheritance and Overriding): 继承是面向对象编程中的另一个重要概念,它允许创建一个类继承另一个类...

Global site tag (gtag.js) - Google Analytics