f.close
является объектом функции, и поэтому использование if f.close
не вызывает функцию. if f.close
, таким образом, всегда оценивается как Истина. Кроме того, если метод не существует, он не вернет False, он выдаст синтаксическую ошибку.
>>> type(f.close)
<class 'builtin_function_or_method'>
>>> type(f.doesnotexist)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: '_io.TextIOWrapper' object has no attribute 'doesnotexist'
Вы можете проверить, что if f.close
будет вычислять, проверив, что возвращает функция bool(.)
:
>>> bool(f.close)
True
Из которого мы можем видеть, что это оценивается как true.
f.closed
- это член, который сообщает вам, был ли ваш файл закрыт (что with
делает автоматически) , f.close()
закрывает ваш файл.
f.closed()
вызывает ошибку TypeError, поскольку f.closed
является логическим значением и поэтому не может быть вызвано:
>>> f.closed()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'bool' object is not callable