Python中的staticmethod和classmethod

2017-07-09  本文已影响130人  MontyOak

总所周知,在面向对象的层面来讲,Python里有三种常见的方法:静态方法(staticmethod)、类方法(classmethod)和实例方法。

class A(object):
    def foo_instance(self, x):
        #这是实例方法
        print 'runing the instance method:{params}'.format(params = (self, x))

    @classmethod
    def foo_class(cls, x):
        #这是类方法
        print 'running the class method:{params}'.format(params = (cls, x))

    @staticmethod
    def foo_static(x):
        #这是静态方法
        print 'runing the static method:{params}'.format(params = x)

上面是三种不同类型的方法在声明时的不同,在调用时,也有些许的不一样:
||实例方法|类方法|静态方法|
|:--|:--|:--|:--|
|a = A()|a.foo_instance(x)|a.foo_class(x)|a.foo_static(x)|
|A|不可用|A.class_foo(x)|A.static_foo(x)|

这里需要简单说明一下selfcls这两个参数。self
cls 分别是对类和实例的绑定,来让解释器知道这个方法里面所用到的类变量/实例变量究竟来自于哪个类/实例。需要注意的是,由于一个实例必定是一个类的具体实现,所以在调用的时候,实例可以使用类方法。

那么,实例方法、类方法和实例方法在使用场景上有什么区别呢?

总结一下,除了少数情况下出现的区分变量作用域情况,在大多数情况下,三种方法都可以写成实例方法的形式。所不同在于,区分方法类型之后的写法可读性更好,对于其所依赖的变量环境一目了然。

上一篇 下一篇

猜你喜欢

热点阅读