美文网首页
python中的装饰器

python中的装饰器

作者: yuanquan521 | 来源:发表于2016-06-17 15:44 被阅读212次

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方法就是一个只读属性)

廖雪峰的python教程

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()

相关文章

网友评论

      本文标题:python中的装饰器

      本文链接:https://www.haomeiwen.com/subject/uosvdttx.html