একটি "উইথ" স্টেটমেন্টটি কি ইঙ্গিত দেয়?


16

আপনি কি withসিনট্যাক্সের সাথে সংজ্ঞাযুক্ত কোনও চলকের জন্য সংকেত প্রকারটি নির্ধারণ করতে পারেন ?

with example() as x:
    print(x)

আমি উপরের দিকে ইঙ্গিতটি টাইপ করতে চাই যে xএটি একটি str(উদাহরণ হিসাবে)।

আমি যে চারপাশের একমাত্র কাজ পেয়েছি তা হ'ল একটি অন্তর্বর্তী ভেরিয়েবল ব্যবহার করা, তবে এটি হ্যাকিং অনুভব করে।

with example() as x:
    y: str = x
    print(y)

টাইপিং ডকুমেন্টেশনে আমি উদাহরণ খুঁজে পাচ্ছি না ।


6
কন্টেন্ট টাইপ চেকাররা xরিটার্ন টাইপের ধরণটি টাইপ করতে পারবেন example().__enter__()?
pschill

2
xযখন এটি কেবল ফিরতি টাইপের হয় তখন আপনি কেন বারণ করতে চান example.__enter__? আদর্শভাবে আপনি সেই পদ্ধতি / ফাংশনটি টিকিয়েছেন।
a_guest

1
xএর ফেরতের মূল্য নয় example; এটা ফেরত মান example().__enter__()
চ্যানার

বেশিরভাগ পদ্ধতি যা আমি পেয়েছি তা প্রত্যাবর্তনের মানটির জন্য কোনও প্রকার ইঙ্গিতটিকে সংজ্ঞায়িত করে না।
পুনর্গঠনিক

1
@ রিঅ্যাক্টগুলার তারপরে সমাধানটি হ'ল সেই ফাংশনের জন্য একটি স্টাব ফাইল তৈরি করা , যাতে প্রকারের পরীক্ষক প্রকারটি নির্ধারণ করতে পারে। সাধারণত আপনি ভিতরে না এপিআই সীমানা এ টিকাদান। এই ক্ষেত্রে এটি স্পষ্ট যে প্রকারটি এসেছে example। টীকাগুলি বোঝানোর example.__enter__অর্থ আপনার এন্ট্রোকেটিংয়ের সাথে সাথে যেখানে আপনাকে সেই প্রসঙ্গে ম্যানেজারটি ব্যবহার করা হয় সেই জায়গাগুলিতেই টীকাগুলি বজায় রাখতে হবে , সাধারণভাবে কোনও ব্যবহারকারী যদি এটি সরবরাহ না করে তবে কীভাবে কোনও এপিআইয়ের রিটার্ন টাইপ কী তা জানতে হবে?
a_guest

উত্তর:


11

পিইপি 526, যা পাইথন 3.6 এ প্রয়োগ করা হয়েছে, আপনাকে ভেরিয়েবলগুলি বেনিফিট করতে দেয়। আপনি উদাহরণস্বরূপ, ব্যবহার করতে পারেন

x: str
with example() as x:
    [...]

অথবা

with example() as x:
    x: str
    [...]

এটি অন্যান্য কোড ব্লকের মতো কাজ করে for। দুর্দান্ত উত্তর, আপনাকে ধন্যবাদ।

প্রসঙ্গ পরিচালক যদি __enter__পদ্ধতিটি কী ফিরে আসবে xতা নির্দেশ না দেয় তবে টাইপিং কোনও উদ্দেশ্য করে না। mypyআনন্দের সাথে কোনও প্রকারের মানকে আবদ্ধ হতে দেয় x
চিপনার

@ চেপনার হ্যাঁ আপনি ঠিক বলেছেন। PyCharm স্বীকার xহিসাবে strউভয় ক্ষেত্রেই কিন্তু mypyনা।
pschill

14

সাধারণত টাইপ টীকাগুলি এপিআই সীমানায় স্থাপন করা হয়। এই ক্ষেত্রে প্রকারটি থেকে অনুমান করা উচিত example.__enter__। যদি সেই ফাংশনটি কোনও প্রকারের ঘোষণা না দেয় তবে সমাধানটি হ'ল ধরণের পরীক্ষককে এই ধরণের ইনফর্মারে সহায়তা করার জন্য সংশ্লিষ্ট স্টাব ফাইল তৈরি করা উচিত।

বিশেষত এর অর্থ হল .pyiযে মডিউলটি থেকে Exampleআমদানি করা হয়েছিল একই স্টেমের সাথে একটি ফাইল তৈরি করা। তারপরে নিম্নলিখিত কোড যুক্ত করা যেতে পারে:

class Example:
    def __enter__(self) -> str: ...
    def __exit__(self, exc_type, exc_value, exc_traceback) -> None: ...
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.