3.1+의 경우 다음 중 하나 :
isinstance(something, io.TextIOBase)
isinstance(something, io.BufferedIOBase)
isinstance(something, io.RawIOBase)
isinstance(something, io.IOBase)
2.x의 경우, "파일 류 객체"는 확인하기에는 너무 모호하지만, 어떤 기능을 다루고 있는가에 대한 문서는 실제로 필요한 것이 무엇인지 알려줄 것입니다. 그렇지 않은 경우 코드를 읽으십시오.
다른 답변이 지적했듯이 가장 먼저 물어볼 것은 정확히 무엇을 확인하고 있는지입니다. 일반적으로 EAFP는 충분하고 관용적입니다.
용어집은 "개체와 같은 파일이"궁극적으로 세 가지 중 하나의 인스턴스를 의미합니다 "파일 객체"에 대한 동의어 말한다 추상 기본 클래스 에 정의 된 모듈 스스로 모든 서브 클래스, . 따라서 확인하는 방법은 위와 같습니다.io
IOBase
(그러나 검사 IOBase
는 그다지 유용하지 않습니다. 텍스트 파일과 원시 파일을 구분할 필요없이 실제 파일과 유사한 read(size)
이름의 일부 단일 인수 함수 를 구분해야하는 경우를 상상할 수 있습니까? read
바이너리 파일입니까? 그래서 실제로는 거의 항상 "is a text file object"가 아닌 "is a file-like object"를 확인하고 싶습니다.)
2.x의 경우 io
모듈이 2.6 이상부터 존재했지만 내장 파일 객체는 io
클래스의 인스턴스가 아니며 stdlib의 파일 류 객체도 아니며 대부분의 타사 파일 류 객체도 아닙니다. 만날 가능성이 있습니다. "파일 류 객체"가 의미하는 바에 대한 공식적인 정의는 없습니다. 그것은 단지 "내장 파일 객체 와 같은 것 "이고, 다른 기능은 "like"에 의해 다른 것을 의미합니다. 이러한 기능은 그 의미를 문서화해야합니다. 그렇지 않은 경우 코드를 확인해야합니다.
그러나 가장 일반적인 의미는 "has read(size)
", "has read()
"또는 "is an iterable of strings"이지만, 일부 오래된 라이브러리는 readline
이들 중 하나 대신 예상 할 수 있습니다 . 일부 라이브러리는 close()
사용자가 제공하는 파일을 좋아 합니다. fileno
존재하면 다른 기능을 사용할 수 있습니다. 그리고 유사하게 write(buf)
(그 방향으로는 훨씬 적은 수의 옵션이 있지만).
why
어떤 사업자가 좋아에 대해__add__
,__lshift__
또는__or__
사용자 정의 클래스에서? (파일 객체와 API : docs.python.org/glossary.html#term-file-object )