@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失效了。
"""