python 对象是什么概念

本文深入探讨Python中装饰器的使用与原理,解析函数作为对象的特性,以及如何通过装饰器增强或修改函数功能。

在python里,对象就是变量,对象其实是一个指针,指向一个数据结构,数据结构里有属性,有方法。

def now():
    print('2015-3-25')
f = now
print(f.__name__)
print(f.c)

变量后面跟一个小数点,小数点后面就是它的属性或方法,带括号的是方法,不带的就是属性。

python中,函数也是一个对象,而且函数对象可以被赋值给变量。

现在来看下python的@语法,或称为装饰器(decorator)

def log(func):#再定义一个函数,只是这个函数的返回值是一个函数,或者可以认为这个函数返回了一个指针,这个指针指向函数wrapper
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper
@log
def now():
    print('2015-3-25')
f = now()#call now():
        #2015-3-25


把@log放到now()函数的定义处,相当于执行了语句,log(now),那这个是怎么执行的呢?

1. 把对象now当成入参传入函数log()

2. 执行return wrapper语句

3. 执行函数 wrapper(),根据函数 wrapper定义可看出此函数接受任意类型入参,

    3.1 执行print('call %s():' % func.__name__)语句,此时func代表的是主函数log(now)的入参对象now, 所以此处会打印对象

now的属性name= now

    3.2 执行func(*args,**kw)=now(*args,**kw),y因为现在没有传参数进来,就是执行now(),

    3.3 执行函数now(),print('2015-3-25')

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值