Я создал подкласс из StringIO для создания класса MockFile.В производном классе должен быть атрибут "name
", но создание этого атрибута приводит к AttributeError
.
. Озадаченный, я выполнил поиск __dict__
и обнаружил, что уже был name
-ключ.Итерируя по __mro__
, я нашел свойство с именем 'name
', очевидно доступное только для чтения в классе io.TextIOWrapper
.
Итак, у меня есть два основных вопроса:
- для чего предназначено это свойство 'name'
- безопасно ли перезаписывать его присваиванием
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