python中的装饰器
1. @property ['prɑpɚti]
@property装饰器就是负责把一个方法变成属性调用。
class Student(object):
@property
def birth(self):
return self._birth
@birth.setter
def birth(self, value):
self._birth = value
@property
def age(self):
return 2014 - self._birth
上面的birth是可读写属性(。@property本身又创建了另一个装饰器@birth.setter,负责把一个setter方法变成属性赋值),而age就是一个只读属性(只定义getter方法,不定义setter方法就是一个只读属性)
2. 静态方法(@staticmethod)
- 不能访问类变量和成员变量以及不能调用累函数和成员函数
- 类内:可以通过self或者cls来调用静态方法
- 类外,可以通过类名或实例化来调用静态方法
3. 类方法
- 可以访问类变量,不能访问成员变量
- 类内: 成员函数之间调用时,可以通过 self. 或 类名 调用
- 类外: 可以通过类名 或者 类的实例对象
4. 实例方法
- 通过实例调用,可以访问类变量和成员变量
- 类定义内: 成员函数之间调用时,可以通过 self. 或者 类名.函数名(对象指针--self),即需要把self 指针传进去
- 类外: 可以通过实例.函数名访问
# -*- coding:utf-8 -*-
"""
File Name : 'te'.py
Description:
Author: 'chengwei'
Date: '2016/6/2' '15:36'
"""
class Foo(object):
inst_no = 0 # 类变量
def __init__(self):
self.a = 1 # 成员变量
@classmethod
def class_foo(cls, x): #该方法可以通过类名直接调用,或者类实例调用
print "executing class_foo(%s,%s)" % (cls, x)
print cls.static_foo # 类内调静态方法
@staticmethod
def static_foo(x):
print "executing static_foo(%s)" % x
def test(self):
self.static_foo('a')
if __name__ == "__main__":
Foo.static_foo('a') # 类外调静态方法
Foo.class_foo('b') # 类外调类方法
t = Foo() # 实例化
print t.inst_no
print t.a
t.static_foo('a')
t.class_foo('b')
t.test()