python staticmethod classmethod
2013-08-19 23:46
405 查看
/article/6216548.html
classmethod:类方法
staticmethod:静态方法
在python中,静态方法和类方法都是可以通过类对象和类对象实例访问。但是区别是:
@classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法。 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例。
普通对象方法至少需要一个self参数,代表类对象实例
类方法有类变量cls传入,从而可以用cls做一些相关的处理。并且有子类继承时,调用该类方法时,传入的类变量cls是子类,而非父类。 对于类方法,可以通过类来调用,就像C.f(),有点类似C++中的静态方法, 也可以通过类的一个实例来调用,就像C().f(),这里C(),写成这样之后它就是类的一个实例了。
静态方法则没有,它基本上跟一个全局函数相同,一般来说用的很少
Example 1:
>>> class a():
Example 2:
class A(object):
@classmethod
def cm(cls):
print '类方法cm(cls)调用者:', cls.__name__
@staticmethod
def sm():
print '静态方法sm()被调用'
class B(A):
pass
A.cm()
B.cm()
A.sm()
B.sm()
输出:
类方法cm(cls)调用者: A
类方法cm(cls)调用者: B
静态方法sm()被调用
静态方法sm()被调用
classmethod:类方法
staticmethod:静态方法
在python中,静态方法和类方法都是可以通过类对象和类对象实例访问。但是区别是:
@classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法。 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例。
普通对象方法至少需要一个self参数,代表类对象实例
类方法有类变量cls传入,从而可以用cls做一些相关的处理。并且有子类继承时,调用该类方法时,传入的类变量cls是子类,而非父类。 对于类方法,可以通过类来调用,就像C.f(),有点类似C++中的静态方法, 也可以通过类的一个实例来调用,就像C().f(),这里C(),写成这样之后它就是类的一个实例了。
静态方法则没有,它基本上跟一个全局函数相同,一般来说用的很少
Example 1:
>>> class a():
@staticmethod def staticm(): print 'static' def normalm(self): print 'nomarl',self @classmethod def classm(cls): print 'class',cls >>> a1=a() >>> a1.normalm() nomarl <__main__.a instance at 0x84dddec> >>> a1.staticm() static >>> a1.classm() class __main__.a >>> type(a) <type 'classobj'> >>> type(a1) <type 'instance'>
Example 2:
class A(object):
@classmethod
def cm(cls):
print '类方法cm(cls)调用者:', cls.__name__
@staticmethod
def sm():
print '静态方法sm()被调用'
class B(A):
pass
A.cm()
B.cm()
A.sm()
B.sm()
输出:
类方法cm(cls)调用者: A
类方法cm(cls)调用者: B
静态方法sm()被调用
静态方法sm()被调用
相关文章推荐
- python 之@staticmethod和@classmethod
- python @classmethod和@staticmethod的区别
- python基础理论(二)-- classmethod & staticmethod
- Python @classmethod和@staticmethod区别
- python @classmethod 和 @staticmethod区别,以及类中方法参数cls和self的区别
- Python staticmethod and classmethod
- Python @staticmethod和@classmethod
- 转 Python 实例方法、@staticmethod和@classmethod
- python staticmethod and classmethod方法
- 【转】Python @classmethod @staticmethod
- python中staticmethod classmethod及普通函数的区别
- Python 入门:装饰器(decorator)、@functools.wraps、@staticmethod、@classmethod
- python @staticmethod @classmethod 区别
- Static method vs class method in Python
- python decorators, classmethod and staticmethod
- python staticmethod&classmethod
- Python 实例方法、@staticmethod和@classmethod
- Python内置函数的staticmethod()与classmethod(),@staticmethod,@classmethod
- python class中的@staticmethod
- python中staticmethod classmethod及普通函数的区别