Я читал, что метод __ enter __ вводит __() и __ exit __(), каждый раз используется «с». Я понимаю, что для пользовательских объектов вы можете сами определить эти методы, но я не понимаю, как это работает для встроенных объектов/функций, таких как «open» или даже testcases.Где находится объект __enter __enter() __enter __enter(), созданный на Python, и __exit __()?
Этот код работает, как ожидалось, и я предполагаю, что он закрывает файл с __ выхода __():
with open('output.txt', 'w') as f:
f.write('Hi there!')
или
with self.assertRaises(ValueError):
remove_driver(self.driver) # self refers to a class that inherits from the default unittest.TestCase
Тем не менее, есть не такие __ не входят __() или __ выхода __ (метод) на любой объект, когда я проверить его:
Так как же «открыто» работать с «с»? Должны ли объекты, поддерживающие протокол управления контекстом, __ вводить методы __() и __ exit __(), определенные и проверяемые?
Пожалуйста, не используйте скриншоты для публикации текста. – Elizafox
Попробуйте '' __exit__ 'в каталоге (open ('/dev/null ')) ' – robyschek
' open' - это не объект, поддерживающий протокол контекстного менеджера. Его * возвращаемое значение * является объектом, поддерживающим этот протокол. Аналогично для 'assertRaises'. – BrenBarn