Я подклассифицировал StringIO для создания класса MockFile. В производном классе должен быть атрибут «name
», но при создании этого атрибута создается AttributeError
.io.StringIO переписывает унаследованное свойство - делать или не делать?
Puzzled я сделал __dict__
и нашел, что уже есть name
-key. Итерируя через __mro__
, я нашел свойство с именем 'name
', явно доступное только для чтения в классе io.TextIOWrapper
.
Так у меня есть в основном два вопроса:
- за то, что это свойство «имя» предназначено
- это безопасно переписать его с
settattr
задания?
Пример кода для Комплектность:
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
Только для записи трюк затенения свойства с атрибутом экземпляра не работает во всех случаях (он не работает для свойств, имеющих сеттер.) –