Python的类一共有三种方法:
- 最常见的类方法
- Classmethod
- Staticmethod
下面这个类包含了这三种方法,从调用可以看出他们的用法。
class A(object):
bar = 1
def foo(self):
print 'foo'
@staticmethod
def static_foo():
print A.bar
@classmethod
def class_foo(cls):
cls().foo()
A.static_foo()
A.class_foo()
a = A()
a.foo()
最常见的类方法
所谓类方法就是通过实例作为第一个参数的方法,里面的self
参数是对类的绑定。
class A(object):
def foo(self):
print 'foo'
Classmethod
如果现在想写一些只与类交互而不和实例交互,我们可以使用类方法和静态方法。
所谓类方法就是只在类中运行,不在实例中运行的方法,定义时,在方法上面用@classmethod
装饰器进行装饰,方法的第一个参数接受一个类,而不是一个对象;使用的时候直接用类名.方法名()调用。
class A(object):
@classmethod
def class_foo(cls):
cls().foo()
A.class_foo()
Staticmethod
还有一种方法,运行时不需要实例和类的参与,他的作用是操作类属性而不是实例属性。
比如说要实现一个统计类构造的实例的个数的功能:
class Spam:
num = 0
def __init__(self):
Spam.num += 1
@staticmethod
def print_num():
print Spam.num
a = Spam()
b = Spam()
Spam.print_num()