3.1+ के लिए, निम्न में से एक:
isinstance(something, io.TextIOBase)
isinstance(something, io.BufferedIOBase)
isinstance(something, io.RawIOBase)
isinstance(something, io.IOBase)
2.x के लिए, "फ़ाइल जैसी वस्तु" बहुत ही अस्पष्ट है, जिसके लिए जांच की जा सकती है, लेकिन आप जिस भी फ़ंक्शन (कार्य) के साथ काम कर रहे हैं, उसके लिए प्रलेखन उम्मीद के साथ आपको बताएगा कि उन्हें वास्तव में क्या चाहिए; यदि नहीं, तो कोड पढ़ें।
जैसा कि अन्य उत्तर बताते हैं, पूछने वाली पहली बात यह है कि आप वास्तव में क्या जाँच रहे हैं। आमतौर पर, ईएएफपी पर्याप्त और अधिक मुहावरेदार है।
शब्दकोष कहते हैं, "फ़ाइल जैसी वस्तु" जो अंततः यह तीन में से एक का एक उदाहरण है जिसका अर्थ है "फ़ाइल वस्तु", के लिए एक पर्याय है सार आधार वर्ग में परिभाषित मॉड्यूल जो खुद के सभी उपवर्गों कर रहे हैं, । तो, जांच करने का तरीका बिल्कुल ऊपर दिखाया गया है।io
IOBase
(हालाँकि, जाँच IOBase
करना बहुत उपयोगी नहीं है। क्या आप एक ऐसे मामले की कल्पना कर सकते हैं जहाँ आपको एक वास्तविक फ़ाइल-जैसे read(size)
किसी एक-तर्क फ़ंक्शन read
से अलग करने की आवश्यकता है, जिसका नाम फ़ाइल-जैसा नहीं है, बिना पाठ फ़ाइलों और कच्चे के बीच अंतर करने की आवश्यकता के बिना बाइनरी फाइलें? तो, वास्तव में, आप लगभग हमेशा जांचना चाहते हैं, उदाहरण के लिए, "एक पाठ फ़ाइल ऑब्जेक्ट" है, न कि "एक फ़ाइल की तरह ऑब्जेक्ट" है।)
2.x के लिए, जबकि io
मॉड्यूल 2.6+ के बाद से मौजूद है, बिल्ट-इन फ़ाइल ऑब्जेक्ट्स io
कक्षाओं के उदाहरण नहीं हैं, न ही स्टडीलिब में कोई फ़ाइल जैसी ऑब्जेक्ट्स हैं, और न ही अधिकांश तृतीय-पक्ष फ़ाइल-जैसी ऑब्जेक्ट्स हैं मुठभेड़ की संभावना है। "फ़ाइल-जैसा ऑब्जेक्ट" का अर्थ की कोई आधिकारिक परिभाषा नहीं थी; यह सिर्फ "एक बिलियन फाइल ऑब्जेक्ट की तरह कुछ है ", और विभिन्न कार्यों का अर्थ "जैसे" द्वारा अलग-अलग चीजें हैं। ऐसे कार्यों का दस्तावेज होना चाहिए कि उनका क्या मतलब है; यदि वे नहीं करते हैं, तो आपको कोड देखना होगा।
हालांकि, सबसे आम अर्थ "हैं read(size)
", "है read()
", या "तार का एक पुनरावृत्ति है", लेकिन कुछ पुराने पुस्तकालयों में readline
से एक के बजाय उम्मीद कर सकते हैं, कुछ पुस्तकालय close()
आपको उन्हें देने वाली फाइलें पसंद करते हैं, कुछ उम्मीद करेंगे कि यदि fileno
तब मौजूद है अन्य कार्यक्षमता उपलब्ध है, आदि और इसी तरह write(buf)
(हालांकि उस दिशा में बहुत कम विकल्प हैं)।
why
ऑपरेटरों के बारे में क्या पसंद है__add__
,__lshift__
या__or__
कस्टम कक्षाओं में? (फ़ाइल ऑब्जेक्ट और एपीआई: docs.python.org/glossary.html#term-file-object )