Python呼び出し可能オブジェクトと可変オブジェクト

2469 ワード

一、呼び出し可能なオブジェクト
クラスでの定義_call__マジックメソッドで、作成したオブジェクトを関数のように呼び出すことができます.
class People:
    def __call__(self, food):
        print("   {0}".format(food))

man = People()
man("  ")

彼はりんごを食べています.
通常、関数を1回呼び出すと破棄され、前回の呼び出しの結果は記録されません.これはステータスなしです.呼び出しオブジェクトに記憶機能を追加し、ステータスのある関数にしてPeopleクラスを変更することができます.
class People:
    def __init__(self):
        self.food = []
    def __call__(self, food):
        self.food.append(food)
        print("   {0}".format(food))

    def __str__(self):
        return str.join("-->",self.food)

man = People()
man("  ")
man("  ")
man("  ")
man("  ")
print("        :",str(man))

彼はりんごを食べています.彼はビスケットを食べています.彼は牛乳を食べています.彼は卵を食べています.彼は食べ物の順番はりんご-->ビスケット-->牛乳-->卵です.
二、可変オブジェクト
メタグループは可変オブジェクトであり、可変オブジェクトはスレッド同期によく使用され、__を使用することを知っています.slots__マジックメソッドでは、可変オブジェクトを作成できます.
可変オブジェクトかへんおぶじぇくと:使用__しようdict__属性現在のインスタンスの属性と属性値の表示
class People:
    def __init__(self):
        self.food = []
        self.hobby = "  "
        self.age = "22 "

    def __call__(self, food):
        self.food.append(food)
        print("   {0}".format(food))

    def __str__(self):
        return str.join("-->",self.food)

man = People()
man.name = "  "
print("man      :",man.__dict__)
del man.name
print("man      :",man.__dict__)

manオブジェクトのプロパティは:{'food':[],'hobby':'バスケットボール','age':'22歳','name':'王王'}manオブジェクトのプロパティは:{'food':[],'hobby':'バスケットボール','age':'22歳'}
クラスでの定義_slots__オブジェクトが自動的に置換されます.dict__オブジェクトを、可変オブジェクトに変換します.で_slots__で属性名を設定すると、_のみ使用できます.slots__に含まれる属性名です.そうしないと、例外がトリガーされます.
class People:
    __slots__ = ["food","hobby","age"]
    def __init__(self):
        self.food = []
        self.hobby = "  "
        self.age = "22 "

    def __call__(self, food):
        self.food.append(food)
        print("   {0}".format(food))

    def __str__(self):
        return str.join("-->",self.food)

man = People()
print("man      :",man.__slots__)
man.name = "  "

manオブジェクトのプロパティは、['food','hobby','age']
AttributeError: 'People' object has no attribute 'name'