2017-02-25 7 views
1

は、我々は、次を参照してください。オブジェクト.__ setattr __()と直接設定されている間に違いはありますか? WERKZEUGで

class Local(object): 
    __slots__ = ('__storage__', '__ident_func__') 

    def __init__(self): 
     object.__setattr__(self, '__storage__', {}) 

だから、私はobject.__setattr__(self, '__storage__', {})、なぜを置き換えるためにself.__storage__ = {}を使用することができますか? object.__setattr__方法をするために使用されるように、しかし

def __setattr__(self, name, value): 
    ident = self.__ident_func__() 
    storage = self.__storage__ 
    try: 
     storage[ident][name] = value 
    except KeyError: 
     storage[ident] = {name: value} 

、あなたの最初の必要性へが最初の空の辞書を設定します。

答えて

2

同じクラスには店舗がself.__storage__には値カスタム__setattr__方法を定義しますカスタムをバイパスします。

self.__storage__ = {}を使用する場合は、self.__storage__がまだ存在しないため、上記のカスタムメソッドが呼び出され、属性エラーが発生します。

関連する問題