python tips - 静态方法和类成员方法

摘自 《Python 基础教程》   9.5.2 静态方法和类成员方法    p149

在讨论实现属性的旧方法前,先让我们绕道而行,看看另一对实现方法和新式属性的实现方法类似的特征。静态方法和类成员方法分别在创建时被装入Staticmethod类型和Classmethod类型的对象中。

静态方法的定义没有self参数,且能够被类本身直接调用。

类方法在定义时需要名为cls的类似于self的参数,类成员方法可以直接在类的具体对象中调用。但cls参数是自动被绑定到类的。

请看下面例子:

__metaclass__ = type

class MyClass:
    def smeth():
        print('This is a static method')
    smeth = staticmethod(smeth)

    def cmeth(cls):
        print('This is a class method of', cls)
    cmeth = classmethod(cmeth)

 

手动包装和替换方法的技术看起来有点单调。在python 2.4 中,为这样的包装方法引用了一个叫做装饰器(decorators)的新语法(它能对任何可调用的对象进行包装,既能够用于方法也能用于函数)。使用@操作符,在方法(或函数)的上方将装饰器列出,从而指定一个或者更多的装饰器(多个装饰器在应用时的顺序与指定顺序相反)。

 

__metaclass__ = type

class MyClass:
    @staticmethod
    def smeth():
        print('This is a static method')

    @classmethod
    def cmeth(cls):
        print('This is a class method of', cls)

    def meth(self):
        print('This is a instance method of', self)

MyClass.smeth()
MyClass.cmeth()
MyClass().meth()

结果:

This is a static method
('This is a class method of', <class __main__.MyClass at 0x7f54fc8b81f0>)
('This is a instance method of', <__main__.MyClass instance at 0x7f54fc8d3950>)

此处让我明白装饰器存在的作用,是为了简化语法。 

 

静态方法和类成员方法在python中并不是向来都很重要,主要的原因是大部分情况下可以使用函数或者绑定方法代替。在早期的版本中没有得到支持也是一个原因。但即使看不到两者在当前代码中的大量应用,也不要忽视静态方法和类成员方法的应用(比如工厂函数),可以好好地考虑一下使用新技术。

转载于:https://www.cnblogs.com/congbo/archive/2012/11/29/2778658.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值