您的位置:首页 > 编程语言 > Python开发

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

2012-11-29 16:57 435 查看
摘自 《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中并不是向来都很重要,主要的原因是大部分情况下可以使用函数或者绑定方法代替。在早期的版本中没有得到支持也是一个原因。但即使看不到两者在当前代码中的大量应用,也不要忽视静态方法和类成员方法的应用(比如工厂函数),可以好好地考虑一下使用新技术。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: