কোনও ফাইল বা ফাইলের মতো অবজেক্টের জন্য ইঙ্গিত টাইপ করবেন?


106

পাইথনে কোনও ফাইল বা ফাইল-জাতীয় অবজেক্টের জন্য ব্যবহার করার জন্য কোনও সঠিক ধরণের ইঙ্গিত রয়েছে? উদাহরণস্বরূপ, আমি কীভাবে এই ফাংশনের রিটার্ন মান টাইপ-ইঙ্গিত করব?

def foo():
    return open('bar')

উত্তর:


146

পাঠ্য মোডে বা বাইনারি মোডে খোলা ফাইলগুলির জন্য যথাক্রমে typing.TextIOবা typing.BinaryIOপ্রকারগুলি ব্যবহার করুন ।

দস্তাবেজগুলি থেকে :

ক্লাস typing.IO

আই / ও স্ট্রিম প্রকারের জন্য মোড়কের নেমস্পেস।

এটি জেনেরিক ধরণ IO[AnyStr]এবং উপকরণ TextIOএবং BinaryIOযথাক্রমে IO[str]এবং এর জন্য সংজ্ঞা দেয় IO[bytes]। এগুলি I / O স্ট্রিমের প্রকারের প্রতিনিধিত্ব করে যেমন ফিরে এসেছে open()


সাধারণভাবে, সম্ভবত টাইপিং.আইপি টাইপ বর্ণনা হিসাবে?
ইওংওয়ে উ

4
এগুলির def f() -> IO: return open('test')কোনওটিই আমার পক্ষে কাজ করছে বলে মনে হচ্ছে না: পাইচার্মে "প্রত্যাশিত ধরণের 'আইও' দেয়, পরিবর্তে 'টেক্সটআইওউপর [টিআর] পেয়েছেন"।

@ মেরিন কি হবে IO[str]?
ওয়েইন ওয়ার্নার

একই আমি ভীত। আমি আরও লক্ষ্য করছি যে কোনও ফাইলের লাইনগুলিতে পুনরাবৃত্তি "" প্রত্যাশিত 'সংগ্রহগুলি ite. "

4
পাইচার্ম সম্প্রদায় 2017 এ @ মারেইনের ইস্যুটি পুনরুত্পাদন করা হয়েছে: i.imgur.com/Ai4sVQl.jpg
জিন-

11

সংক্ষিপ্ত উত্তর:

  • আপনার স্পষ্ট হওয়া দরকার। শুধু তাই from typing import TextIOনয় from typing import *
  • IOকোন ধরণের নির্দিষ্ট না করেই কোনও ফাইল বোঝাতে ব্যবহার করুন
  • ব্যবহার করুন TextIOবা BinaryIOযদি আপনি টাইপ জানেন
  • আপনি বর্তমানে এটি লেখার জন্য বা এর এনকোডিংয়ের জন্য খোলার নির্দিষ্ট করতে পারবেন না।

উদাহরণ হিসাবে:

from typing import BinaryIO

def binf(inf: BinaryIO):
    pass

with open('x') as f:
    binf(f)

এর একটি পরিদর্শন ত্রুটি দেয় (পাইচার্মে) Expected type 'BinaryIO', got 'TextIO' instead

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.