Python Cookbook3 学习笔记

第八章 类与对象

属性

python通过约定实现数据封装

  1. 以_开头的属性代表内部实现
  2. 以__开头的属性会重命名,目的是避免继承后被覆盖

property

属性管理

装饰器

不改变原有逻辑的前提下增加逻辑,比如日志、事务、性能测试
函数装饰器(支持目标函数携带任意参数)
类装饰器(实现了__call__方法)
functools.warp 保留目标函数元信息
多个修饰器,由内至外执行

def deco(fun):
    def wrapper(*args, **kw):
        print("start to invoke ")
        print("args: ", args)
        print("kw: ", kw)
        r = fun(args, kw)
        print("end to invoke ")
        return r
    return wrapper

@deco
def f(params, a=1):
    print("function[%s] invoked"%params)
    return params


class Foo(object):
    def __init__(self, func):
        self.func = func

    def __call__(self, *args):
        print("start to call")
        self.func(args)
        print("end call")

@Foo
def foo(a):
    print("foo function invoke[%s]"%a)


# Example
if __name__ == '__main__':
    r = f("123", a=12)
    print(r)
    foo("foo")

描述器<广泛使用>

实现了__get__,set,__delete__方法的类
使用方式: 描述器类实例作为类属性

对象属性查找过程

在调用对象方法或者访问属性时,实际调用的是getattribute方法,此方法会先去对象的__dict__中查找,若找不到则再去类的__dict__中查找,若找不到最后调用getattr方法。一般情况下,不修改getattribute方法,而是修改getattr方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值