python3,定制类,getattr相关用法
PHP中文网
PHP中文网 2017-04-18 10:25:47
0
1
531
class Chain(object):
    def __init__(self,path=""):
        self._path = path
    def __getattr__(self,path):
        return Chain("%s/%s" %(self._path,path))
    def __call__(self,path):
        return Chain("%s/%s" %(self._path,path))
    def __str__(self):
        return self._path
    __repr__ = __str__
    
print(Chain().a.b.user("Michael").c.d)

看了好久还是理解不了这语句,如能详述一些细节,感激不尽

PHP中文网
PHP中文网

认证高级PHP讲师

全員に返信(1)
PHPzhong

getattr(オブジェクト, 名前[, デフォルト])

リーリー

_getattr__ は、属性を動的に返す Python の組み込み関数です
存在しない属性を呼び出すと、Python は __getattr__(self,'score') を呼び出して属性を取得し、スコアを返そうとします

__str__ は関数を出力するために使用されます
__call__ は同様の関数としてクラスを呼び出します

コード実行プロセス:
Chain() はインスタンスを作成し、パスは最初はデフォルトの "" になります。Chain().a の場合、クラスには属性がなく、Python パーサーは getattr 関数を呼び出します。 __getattr__(self,path ='a'),
そして Chain インスタンスを返し、/a 割り当て gei パスを渡し、b 属性がないので b を継続し、getattr 関数を実行し、/a/b を渡します、
次に .user(" Michael") を実行すると、まず getattr を実行して Chain インスタンスを返しますが、() 括弧があるため Chain() を返します。
これにより call 関数が呼び出され、「ChenTian」が次のように渡されます。パスを指定して関数を呼び出すと、/a/b/user/ChenTian が返され、残りは同様です。

リーリー

コードフローチャート

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート