3.1+ için aşağıdakilerden biri:
isinstance(something, io.TextIOBase)
isinstance(something, io.BufferedIOBase)
isinstance(something, io.RawIOBase)
isinstance(something, io.IOBase)
2.x için, "dosya benzeri nesne" kontrol edilemeyecek kadar belirsiz bir şeydir, ancak uğraştığınız işlev (ler) için belgeler umarız size gerçekte neye ihtiyaçları olduğunu söyleyecektir; değilse, kodu okuyun.
Diğer yanıtların da işaret ettiği gibi, sormanız gereken ilk şey, tam olarak neyi aradığınızdır. EAFP genellikle yeterlidir ve daha deyimseldir.
Sözlüğü "nesne benzeri dosya" sonuçta üç birinin bir örneği var demektir "dosya nesnesi", eş anlamlıdır diyor soyut temel sınıflar tanımlanan modül kendilerini her alt sınıflarıdır . Yani, kontrol etmenin yolu tam olarak yukarıda gösterildiği gibidir.ioIOBase
(Bununla birlikte, kontrol etmek IOBasepek kullanışlı değildir. Gerçek bir dosya benzeri read(size), dosya benzeri olmayan tek bağımsız değişkenli bir işlevi read, ayrıca metin dosyaları ve ham metin dosyaları arasında ayrım yapmanıza gerek kalmadan ayırt etmeniz gereken bir durum hayal edebiliyor musunuz? Yani, gerçekten, neredeyse her zaman kontrol etmek istersiniz, örneğin, "bir metin dosyası nesnesidir", "dosya benzeri bir nesnedir" değil.)
2.x için, iomodül 2.6+ sürümünden beri var olsa da , yerleşik dosya nesneleri iosınıfların örnekleri değildir , stdlib'deki dosya benzeri nesneler ve üçüncü taraf dosya benzeri nesneler de değildir. karşılaşmanız muhtemeldir. "Dosya benzeri nesnenin" ne anlama geldiğine dair resmi bir tanım yoktu; bu sadece "yerleşik bir dosya nesnesi gibi bir şey " ve farklı işlevler "beğenmek" ile farklı şeyler ifade ediyor. Bu tür işlevler ne anlama geldiklerini belgelemelidir; yoksa, koda bakmanız gerekir.
Bununla birlikte, en yaygın anlamlar "vardır read(size)", "vardır read()" veya "dizelerin yinelenebiliridir", ancak bazı eski kitaplıklar readlinebunlardan biri yerine bekleyebilir , bazı kitaplıklar close()onlara verdiğiniz dosyaları sever , bazıları ise filenoo zaman diğer işlevler mevcuttur, vb. Ve benzer şekilde write(buf)(bu yönde çok daha az seçenek olmasına rağmen).
whyNe operatörleri gibi ilgili__add__,__lshift__ya da__or__özel sınıflarda? (dosya nesnesi ve API: docs.python.org/glossary.html#term-file-object )