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

Python标准库:内置函数classmethod(function)

2016-02-27 13:58 501 查看
把类函数当作类的一个方法返回。

类方法第一个參数是指明类,跟类中函数一样,第一个參数是指明类实例。

类方法修饰符採用以下的格式来使用:

class C:

@classmethod

def f(cls, arg1, arg2, ...):

...

从上面格式来看,@classmethod是函数在前置的一个修饰符。能够查看语言參考手冊。

经过类方法修饰符的函数,能够直接通过类来调用,比方C.f()方式。也能够通实例的方式来调用,比方C().f()方式,但这个实例在这个函数里被忽略掉了,没起到什么作用。

假设类方法修饰符的函数,在继承类时,派生类作为第一个參数传递给这个函数,也就是cls等于派生类。

类方法修饰符定义的函数与C++或JAVA里静态函数是不一样的,假设要类似的功能。须要使用另外一个修饰符staticmethod。

classmethod设计的目的是什么呢?事实上与Python面向对象编程有关的,由于Python不支持多个的參数重载构造函数,比方在C++里,构造函数能够依据參数个数不一样。能够写多个构造函数。Python为了解决问题,採用classmethod修饰符的方式,这样定义出来的函数就能够在类对象实例化之前调用这些函数,就相当于多个构造函数,解决多个构造函数的代码写在类外面的问题。

与修饰符staticmethod的差别是类方法有一个类型參数,而静态方法没有。静态方法主要用来解决全局函数的作用域的问题,而类方法是解决多个构造函数的问题。因此应用场境不一样。

样例:

#classmethod()

class C:
def __init__(self, i):
print('__init__: %d' % i)
@classmethod
def f(cls, name):
print(name)
return C(int(name))

a = C(1)
b = C.f('10')
c = C(2).f('100')

class D(C):
pass

D.f('20')


输出结果例如以下:

__init__: 1

10

__init__: 10

__init__: 2

100

__init__: 100

20

__init__: 20
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: