Python装饰器语法(@staticmethod/@classmethod@property)

@staticmethod 不需要表示自身对象的self和自身类的cls参数,就和使用普通的函数一样。

@classmethod 不需要self参数,但是第一个参数需要表示自身类的cls参数。

@property 表示类的属性方法,如果没有__init__的存在,则@proprety失效

class A(object):  
    bar = 1  
  
    def foo(self):  
        print ' call function foo in class A '  
 
    @staticmethod  
    def static_foo():  
        print 'static_foo'  
        print A.bar  
 
    @classmethod  
    def class_foo(cls):  
        print 'class_foo'  
        print cls.bar  
        cls().foo()  
A.static_foo()  
A.class_foo() 

"""
执行结果
static_foo
1
class_foo
1
 call function foo in class A 
那最后一个装饰器是什么意思呢。
简而言之就是可以在调用的时候不用加()
"""
class A(object):  
    def __init__(self,name,age):  
        self.name = name  
        self.age = age  
    @property  
    def static_foo(self):  
        print self.name  
        return 'yes'  
  
num = A("Liu","21")  
num.static_foo
"""
执行结果是:
Liu
如果是 print num.static_foo  呢?
结果是
Liu
yes
None

还有一点是,类里面没有__init__ 的话,就@property失效了。
"""

你可能感兴趣的:(Python装饰器语法(@staticmethod/@classmethod@property))