MockFileクラスを作成するためにStringIOから継承しました。派生クラスには属性「name
」が必要ですが、この属性を作成するとAttributeError
がスローされます。io.StringIOは継承されたプロパティを上書きしますか?
私は__dict__
ルックアップを実行し、既にname
-keyが見つかっています。 __mro__
を反復すると、私はクラスの明示的に読み取り専用である 'name
'という名前のプロパティを見つけました。この「名前」プロパティは
settattr
割り当てで上書きしても安全であることを意図している何のため
- :
は、だから私は基本的に2つの質問がありますか?
completnessたとえばコード:
class MockFile(StringIO):
def __init__(self, name, buffer_ = None):
super(MockFile, self).__init__(buffer_)
self.name = name
>>> mfile = MockFile('stringio.tmp', u'#MockFile')
がにつながる:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in __init__
AttributeError: can't set attribute
インスタンス属性を持つプロパティをシャドーするというトリックは、すべてのケースで機能しません(セッターを持つプロパティでは機能しません)。 –