Python中的@classmethod方法和cls参数

@classmethod装饰的方法为类方法,传入cls参数封装了类的信息的对象。可以直接用类名调用方法。

但是和@staticmethod装饰方法不同一点是。用@classmethod装饰的方法可以调用对象方法,当调用对像方法时调用对象打的初始化方法__init__。如果没调用对象方法则不创建对象。@classmethod装饰会创建一个对象,但会调用多次初始化方法。cls()等同于调用__init__(self)方法,返回self对象。根据__init__()的参数,传入cls()中的参数,每次返回一个对象,可以返回多个对象,如[cls(),cls(),cls()]。

class MyList(object):
    @classmethod
    def fun2(cls):
        print(cls()) #cls()方法返回self对象,所以调用初始化方法
        #print(112)#只有调用对象方法才会调用初始化方法
        print(type(cls))
        cls().fun()
    def __init__(self): 
        print(self)
        print('init')
    def fun(self):
        print(self)

返回结果:

<__main__.MyList object at 0x01C940F0>
init
<__main__.MyList object at 0x01C940F0>
<class 'type'>
<__main__.MyList object at 0x01C940F0>
init
<__main__.MyList object at 0x01C940F0>



猜你喜欢

转载自blog.csdn.net/yaoct/article/details/80589020
今日推荐