python魔法の方法の紹介

5714 ワード

魔法の方法はpthonの中の類の中でいくつか_xxx__()この形式の関数.強力な機能.
1つ目はもちろん初期の作成方法1.init__(self[,])クラスを初期化し,意味が自明である.
2. __str__(self[,])と_repr__(self[,])__str__(a)str(a)に等価である.__repr__(a)は、repr(a)と等価であり、両方ともインスタンスオブジェクトを文字列に変換するツールであり、__str__()はユーザに対してである.__repr__()は開発者向けです.__str__()がデフォルトの場合、__repr__()関数が呼び出されます.
class Test():
    def __init__(self, name):
        self.name = name
    def __str__(self):
        #    print(object)      ,    __str__  
        #      __str__   ,       str(self),              str
        return 'test __str__'
    def __repr__(self):
        return 'test __repr__'

a = Test('testname')
print(a)
print([a])

結果:
test __str__
[test __repr__]

結論:両方ともクラスのいくつかの情報を得るためにビット文字を変換する関数であり、str()のような文字に直接処理するとprint()が呼び出される.クラスを文字に直接処理しないと、リスト、tuple、dictなどになってから印刷して、__str__を呼び出してもいいですよ.ユーザーがリスト、tupleなどを游んでくれても、何なのか分かりません.次のような違いがあります.
import datetime

today = datetime.date.today()
print(str(today))
print(repr(today))

結果:
2019-01-06
datetime.date(2019, 1, 6)
__repr__は、認識度の高い文字列を容易に認識することができる.str()はpythonに格納して実行できる文字列を得る.だから一斑も見えます.
3. __call__(self[,])この方法は,作成されたオブジェクトを関数として呼び出すことができるようにする.
4. __name__ 実は方法ではなく、内蔵変数です.1つだけ:このpyファイルが実行されると、repr()__name__です.importのmoduleである場合、__main__はファイル名である.
# test.py  
def main():
    print('name:', __name__)

if __name__ == '__main__':
    main()

#     :name:__main__
# test_name.py  
import test

def main():
    print('name:', __name__)

if __name__ == '__main__':
    test.main()
    main()

結果:
name: test
name: __main__

「Make a script both importable and executable」はpythonに本当の入り口があるように見せましょう(C/C+/JAVAのように)
続きます...