pythonオブジェクトの概念

1113 ワード

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