পাইথন 3.5 তে টাইপ ইঙ্গিতগুলি কী কী?


250

পাইথন ৩.৩-এ সর্বাধিক আলোচিত বৈশিষ্ট্যগুলির মধ্যে একটি হ'ল টাইপ ইঙ্গিত

একটি উদাহরণ টাইপ নির্দেশ উল্লেখ করা হয় এই নিবন্ধটি এবং এই এক পাশাপাশি দায়িত্বের টাইপ নির্দেশ ব্যবহার করতে উল্লেখ। কেউ তাদের সম্পর্কে আরও ব্যাখ্যা করতে পারেন এবং কখন তাদের ব্যবহার করা উচিত এবং কখন নয়?


4
আপনার পিইপি 484 এ নজর দেওয়া উচিত যা অফিসিয়াল চেঞ্জলগ থেকে লিঙ্কযুক্ত ।
স্টিফান

1
@AvinashRaj: রিলিজ সম্পর্কে একটি ভাল আলোচনা চলছে এখানে
Vaulstein

1
এটি অত্যন্ত দুঃখের বিষয় যে সি-এপিআই ব্যবহারের কেসটি এই পিইপি 484 দ্বারা সম্পূর্ণ উপেক্ষা করা হয়েছে, বিশেষত সাইথন এবং নুম্বার জন্য ইঙ্গিতগুলি টাইপ করুন।
denfromufa

উত্তর:


343

আমি পিইপি 483 এবং পিইপি 484 পড়ার এবং টাইপ হিন্টিংয়ের বিষয়ে গিডোর এই উপস্থাপনাটি দেখার পরামর্শ দেব ।

সংক্ষেপে : টাইপ হিন্টিং শব্দের অর্থ আক্ষরিক অর্থ, আপনি যে বস্তুর (গুলি) ব্যবহার করছেন তা ইঙ্গিত করেছেন

পাইথনের গতিশীল প্রকৃতির কারণে , কোন বস্তুর ব্যবহার অনুমান করা বা তার ধরণ নির্ধারণ করা বা পরীক্ষা করা বিশেষত শক্ত। এই সত্যটি বিকাশকারীদের পক্ষে ঠিক কী কোডটি তারা লিখেছেন না তা কী বুঝতে পারে তা বোঝা শক্ত করে তোলে এবং সবচেয়ে গুরুত্বপূর্ণ, অনেক আইডিইতে পাওয়া টাইপ চেকিং সরঞ্জামগুলির জন্য [পাইকার্ম, পিডিএভ মনে পড়ে] যা এই কারণে সীমাবদ্ধ রয়েছে যে বস্তুগুলি কী ধরণের তা তাদের কোনও সূচক নেই। ফলস্বরূপ তারা প্রায় 50% সাফল্যের হারের সাথে (উপস্থাপনায় উল্লিখিত) প্রকারটি অনুমান করার চেষ্টা করে।


টাইপ হিন্টিং উপস্থাপনা থেকে দুটি গুরুত্বপূর্ণ স্লাইড নিতে:

কেন ইঙ্গিতগুলি টাইপ করুন?

  1. প্রকারের চেকারগুলিকে সহায়তা করে: কোন ধরণের প্রকারটি আপনি কী ধরণের চাইছেন তা ইঙ্গিত করে সহজেই সনাক্ত করতে পারেন যদি উদাহরণস্বরূপ, আপনি কোনও ধরণের প্রত্যাশিত নয় এমন কোনও বস্তু দিয়ে যাচ্ছেন।
  2. ডকুমেন্টেশনে সহায়তা করে: আপনার কোড দেখছেন এমন একজন তৃতীয় ব্যক্তি জানতে পারবেন কোথায় কী হবে, কীভাবে তা না পেয়ে কীভাবে ব্যবহার করবেন TypeErrors
  3. আইডিইগুলিকে আরও নির্ভুল এবং শক্তিশালী সরঞ্জাম বিকাশ করতে সহায়তা করে: আপনার বস্তুটি কী ধরণের তা জেনে যখন বিকাশ পরিবেশ উপযুক্ত পদ্ধতিগুলি প্রস্তাব করার ক্ষেত্রে আরও উপযুক্ত হবে suited আপনি সম্ভবত এটি কোনও আইডিইর সাথে অভিজ্ঞতা অর্জন করেছেন, .কোনও বিষয়টির জন্য সংজ্ঞায়িত নয় এমন পদ্ধতি / বৈশিষ্ট্যগুলি পপ আপকে আঘাত করে এবং রাখছেন।

স্ট্যাটিক টাইপ চেকার কেন ব্যবহার করবেন?

  • তাত্ক্ষণিক বাগগুলি সন্ধান করুন : এটি স্বয়ংসম্পূর্ণ, আমি বিশ্বাস করি।
  • আপনার প্রকল্পটি যত বড় আপনার প্রয়োজন হবে : আবারও তা বোঝার জন্য। স্থির ভাষাগুলি একটি দৃust়তা এবং নিয়ন্ত্রণ দেয় যা গতিশীল ভাষার অভাব থাকে। আপনার অ্যাপ্লিকেশনটি যত বড় এবং জটিল হবে আপনার তত বেশি নিয়ন্ত্রণ এবং ভবিষ্যদ্বাণী হয়ে যায় (আচরণগত দিক থেকে) require
  • বড় দলগুলি ইতিমধ্যে স্থির বিশ্লেষণ চালাচ্ছে : আমি অনুমান করছি যে এটি প্রথম দুটি পয়েন্ট যাচাই করে।

এই ছোট পরিচিতির জন্য একটি সমাপনী নোট হিসাবে : এটি একটি alচ্ছিক বৈশিষ্ট্য এবং যা আমি বুঝতে পেরেছি, এটি স্ট্যাটিক টাইপিংয়ের কিছু সুবিধা কাটানোর জন্য চালু করা হয়েছিল।

আপনি সাধারণত না এটা সম্পর্কে চিন্তা করতে হবে এবং স্পষ্টভাবে এটি ব্যবহার করতে (বিশেষত ক্ষেত্রে যেখানে আপনি একটি অক্জিলিয়ারী স্ক্রিপ্টিং ভাষা হিসেবে পাইথন ব্যবহারে আছে) প্রয়োজন হবে না। বড় প্রকল্পগুলি বিকাশ করার সময় এটি সহায়ক হতে পারে কারণ এটি প্রচুর দৃ rob়তা, নিয়ন্ত্রণ এবং অতিরিক্ত ডিবাগিং ক্ষমতা সরবরাহ করে


মাইপি সহ হিন্টিং টাইপ করুন :

এই উত্তরটি আরও সম্পূর্ণ করার জন্য, আমি মনে করি যে একটু বিক্ষোভ উপযুক্ত হবে। আমি ব্যবহার করব mypy, লাইব্রেরি যা প্রকারের ইঙ্গিতগুলিকে পিইপিতে উপস্থাপিত করার জন্য অনুপ্রাণিত করেছিল। এটি মূলত এই প্রশ্নটির জন্য যে কারও জন্য ঝাঁপিয়ে পড়ে এবং কোথায় শুরু করা যায় তা নিয়ে ভাবছেন।

আমি এটি করার আগে আমাকে নিম্নলিখিতগুলি পুনর্বার বলি: পিইপি 484 কিছুই প্রয়োগ করে না; এটি কেবল ফাংশন টীকাগুলির জন্য একটি নির্দেশিকা নির্ধারণ করছে এবং কীভাবে টাইপ চেকিং করা যায় / করা উচিত তার জন্য নির্দেশিকাগুলি প্রস্তাব করা হচ্ছে। আপনি আপনার ফাংশনগুলি বর্নিত করতে পারেন এবং যতগুলি চান ইঙ্গিত করতে পারেন; আপনার স্ক্রিপ্টগুলি টীকাগুলির উপস্থিতি নির্বিশেষে চলবে কারণ পাইথন নিজেই সেগুলি ব্যবহার করে না।

যাইহোক, পিইপিতে উল্লিখিত হিসাবে, হিন্টিং ধরণের সাধারণত তিনটি ফর্ম নেওয়া উচিত:

  • ফাংশন টিকা। ( পিইপি 3107 )
  • অন্তর্নির্মিত / ব্যবহারকারী মডিউলগুলির জন্য স্টব ফাইলগুলি।
  • # type: typeপ্রথম দুটি ফর্ম পরিপূরক বিশেষ মন্তব্য। (দেখুন: পাইথন ৩.6-এ পরিবর্তনীয় টীকাগুলি কী?# type: type মন্তব্যগুলির জন্য পাইথন ৩.6 আপডেটের জন্য )

অতিরিক্তভাবে, আপনি typingপ্রবর্তিত নতুন মডিউলটির সাথে একত্রে প্রকারের ইঙ্গিতগুলি ব্যবহার করতে চাইবেন Py3.5। এতে, অনেকগুলি (অতিরিক্ত) এবিসি (বিমূর্ত বেস ক্লাস) স্থির চেকিংয়ে ব্যবহারের জন্য সহায়ক ফাংশন এবং সজ্জকারদের সাথে সংজ্ঞায়িত করা হয়। সর্বাধিক ABCsমধ্যে collections.abcঅন্তর্ভুক্ত করা হয় কিন্তু একটি Genericঅনুক্রমে ফর্ম সাবস্ক্রিপশন করার অনুমতি (ক সংজ্ঞা দ্বারা __getitem__()পদ্ধতি)।

এগুলির আরও গভীরতর ব্যাখ্যায় আগ্রহী যে কোনও ব্যক্তির জন্য, এটি mypy documentationখুব সুন্দরভাবে লেখা হয়েছে এবং তাদের চেকারের কার্যকারিতা বর্ণনা / বর্ণনা করার জন্য প্রচুর কোড নমুনা রয়েছে; এটি অবশ্যই পড়ার পক্ষে মূল্যবান।

ফাংশন টীকা এবং বিশেষ মন্তব্য:

প্রথমত, বিশেষ মন্তব্যগুলি ব্যবহার করার সময় আমরা পেতে পারি এমন কিছু আচরণ পর্যবেক্ষণ করা আকর্ষণীয়। # type: typeভেরিয়েবল অ্যাসাইনমেন্টের সময় বিশেষ মন্তব্য যুক্ত করা যেতে পারে যদি কোনও ব্যক্তির সরাসরি অনুমান করা যায় না তবে কোনও সামগ্রীর ধরণটি নির্দেশ করতে পারে। সাধারণ অ্যাসাইনমেন্টগুলি সাধারণত সহজেই অনুমান করা হয় তবে অন্যদের মতো তালিকাগুলি (তাদের বিষয়বস্তু সম্পর্কে), পারে না।

দ্রষ্টব্য: আমরা যদি কোনও Containersধারক ব্যবহার করতে চাই এবং সেই ধারকটির জন্য বিষয়বস্তু নির্দিষ্ট করতে চাই তবে আমাদের অবশ্যই মডিউল থেকে জেনেরিক প্রকারগুলি ব্যবহার করতে হবেtypingএই সমর্থন সূচী।

# generic List, supports indexing.
from typing import List

# In this case, the type is easily inferred as type: int.
i = 0

# Even though the type can be inferred as of type list
# there is no way to know the contents of this list.
# By using type: List[str] we indicate we want to use a list of strings.
a = []  # type: List[str]

# Appending an int to our list
# is statically not correct.
a.append(i)

# Appending a string is fine.
a.append("i")

print(a)  # [0, 'i']

যদি আমরা কোনও ফাইলগুলিতে এই কমান্ডগুলি যুক্ত করি এবং আমাদের দোভাষী দ্বারা এটি কার্যকর করি তবে সবকিছু ঠিকঠাক কাজ করে এবং print(a)কেবলমাত্র লিস্টের বিষয়বস্তু মুদ্রণ করে a# typeমন্তব্য বাতিল করা হয়েছে, প্লেইন মন্তব্য যা কোন অতিরিক্ত শব্দার্থিক অর্থ আছে বলে গণ্য

সঙ্গে এই চলার mypyঅপরপক্ষে, আমরা কোন সাড়া পাবেন:

(Python3)jimmi@jim: mypy typeHintsCode.py
typesInline.py:14: error: Argument 1 to "append" of "list" has incompatible type "int"; expected "str"

ইঙ্গিত করে যে strবস্তুর তালিকায় intকোনওটি থাকতে পারে না , যা স্থিরভাবে বলা যায়, এটি দুর্দান্ত। এটি হয় ধরণ পালনকারী দ্বারা সংশোধন করা যেতে পারে aএবং শুধুমাত্র সংযোজন strবস্তু বা বিষয়বস্তু ধরণ পরিবর্তন করে aনির্দেশ করে কোনো মান গ্রহণযোগ্য (স্বজ্ঞা সাথে সঞ্চালিত List[Any]পর Anyথেকে আমদানি করা হয়েছে typing)।

param_name : typeআপনার ফাংশন স্বাক্ষরের প্রতিটি প্যারামিটারের পরে ফাংশনে টীকাগুলি যুক্ত করা হয় -> typeএবং শেষ ফাংশন কোলনের আগে স্বরলিপিটি ব্যবহার করে একটি রিটার্ন টাইপ নির্দিষ্ট করা হয় ; সমস্ত টীকাগুলি __annotations__একটি কার্যকরী অভিধান আকারে। ফাংশনের জন্য অ্যাট্রিবিউটে সংরক্ষণ করা হয়। তুচ্ছ উদাহরণ ব্যবহার করে (যার জন্য typingমডিউল থেকে অতিরিক্ত ধরণের প্রয়োজন হয় না ):

def annotated(x: int, y: str) -> bool:
    return x < y

annotated.__annotations__অ্যাট্রিবিউট এখন নিম্নলিখিত মান রয়েছে:

{'y': <class 'str'>, 'return': <class 'bool'>, 'x': <class 'int'>}

যদি আমরা একটি সম্পূর্ণ নুবি, বা Py2.7ধারণাগুলির সাথে আমরা পরিচিত এবং এর TypeErrorতুলনায় লুকোচুরি সম্পর্কে অজানা annotatedথাকি তবে আমরা আরও একটি স্থিতিশীল চেক করতে পারি, ত্রুটিটি ধরতে পারি এবং আমাদের কিছুটা সমস্যা বাঁচাতে পারি:

(Python3)jimmi@jim: mypy typeHintsCode.py
typeFunction.py: note: In function "annotated":
typeFunction.py:2: error: Unsupported operand types for > ("str" and "int")

অন্যান্য বিষয়গুলির মধ্যে, অবৈধ যুক্তি দিয়ে ফাংশনটি কল করাও ধরা পড়বে:

annotated(20, 20)

# mypy complains:
typeHintsCode.py:4: error: Argument 2 to "annotated" has incompatible type "int"; expected "str"

এগুলিকে মূলত কোনও ব্যবহারের ক্ষেত্রে বাড়ানো যেতে পারে এবং ধরা পড়ে থাকা ত্রুটিগুলি বেসিক কল এবং ক্রিয়াকলাপের চেয়ে আরও বাড়ানো যায়। আপনি যে ধরণের জন্য যাচাই করতে পারেন তা সত্যিই নমনীয় এবং আমি কেবল এর সম্ভাবনার একটি ছোট্ট ছিঁচকেছি peak typingমডিউল, পিইপি বা mypyদস্তাবেজগুলির একটি চেহারা আপনাকে প্রদত্ত ক্ষমতাগুলির আরও বিস্তৃত ধারণা দেবে।

স্টাব ফাইল:

স্টাব ফাইল দুটি ভিন্ন ভিন্ন পারস্পরিক একচেটিয়া ক্ষেত্রে ব্যবহার করা যেতে পারে:

  • আপনাকে এমন একটি মডিউল যাচাই করতে হবে যার জন্য আপনি সরাসরি ফাংশনের স্বাক্ষরগুলি পরিবর্তন করতে চান না
  • আপনি মডিউল লিখতে এবং টাইপ-চেক করতে চান তবে অতিরিক্তভাবে টীকা থেকে টীকা পৃথক করতে চান।

স্টাব ফাইলগুলি (একটি এক্সটেনশান সহ .pyi) হ'ল আপনি যে মডিউলটি তৈরি করতে / ব্যবহার করতে চান তার একটি টীকা দেওয়া ইন্টারফেস। এগুলিতে যে ফাংশনগুলি আপনি ফেলে দিতে চান তার শরীরের সাথে টাইপ-চেক করতে চান এমন ফাংশনের স্বাক্ষর রয়েছে। এটির অনুভূতি পেতে, নামের একটি মডিউলে তিনটি এলোমেলো ফাংশনগুলির একটি সেট দেওয়া হয়েছে randfunc.py:

def message(s):
    print(s)

def alterContents(myIterable):
    return [i for i in myIterable if i % 2 == 0]

def combine(messageFunc, itFunc):
    messageFunc("Printing the Iterable")
    a = alterContents(range(1, 20))
    return set(a)

আমরা একটি স্টাব ফাইল তৈরি করতে পারি randfunc.pyi, যাতে আমরা এটি করতে চাইলে কিছু বিধিনিষেধ তৈরি করতে পারি। নেতিবাচকতাটি হ'ল স্টাব ছাড়াই উত্সটি দেখছেন এমন কোনটি কোথায় পাস করার কথা তা বোঝার চেষ্টা করার সময় সত্যিকার অর্থে সেই টীকাটি সহায়তা পাওয়া যাবে না।

যাইহোক, একটি স্টাব ফাইলের কাঠামো বেশ সরলতর: খালি দেহ ( passভরা) সহ সমস্ত ফাংশন সংজ্ঞা যুক্ত করুন এবং আপনার প্রয়োজনীয়তার উপর ভিত্তি করে টীকা সরবরাহ করুন। এখানে, ধরে নেওয়া যাক আমরা কেবলমাত্র intআমাদের ধারকগুলির জন্যই কাজ করতে চাই ।

# Stub for randfucn.py
from typing import Iterable, List, Set, Callable

def message(s: str) -> None: pass

def alterContents(myIterable: Iterable[int])-> List[int]: pass

def combine(
    messageFunc: Callable[[str], Any],
    itFunc: Callable[[Iterable[int]], List[int]]
)-> Set[int]: pass

combineফাংশন কেন আপনি কি অন্য কিছু ফাইলে টীকা ব্যবহার করতে চাইতে পারেন একটি ইঙ্গিত দেয়, তারা কিছু সময়ের কোড আপ বিশৃঙ্খল এবং (পাইথন জন্য বড় চল নেই) পাঠযোগ্যতা কমানো। আপনি অবশ্যই প্রকারের এলিয়াস ব্যবহার করতে পারেন তবে এটি কখনও কখনও এটির চেয়ে বেশি বিভ্রান্ত করে (তাই সেগুলি বুদ্ধিমানের সাথে ব্যবহার করুন)।


এটি আপনাকে পাইথনের টাইপ ইঙ্গিতগুলির প্রাথমিক ধারণাগুলির সাথে পরিচিত হতে হবে। যদিও টাইপ চেকারটি ব্যবহার করা হয়েছে mypyতা ধীরে ধীরে আপনার বেশিরভাগ পপ-আপ দেখা শুরু করা উচিত, কিছু অভ্যন্তরীণভাবে আইডিই ( পাইচার্ম ,) এবং অন্যদের স্ট্যান্ডার্ড পাইথন মডিউল হিসাবে। আমি চেষ্টা করব এবং নীচের তালিকায় অতিরিক্ত চেকার / সম্পর্কিত প্যাকেজগুলি যুক্ত করব এবং যখন আমি তাদের খুঁজে পাই (বা যদি প্রস্তাবিত হয়)।

আমার জানা চেকাররা :

  • মাইপি : এখানে বর্ণিত।
  • পাইটাইপ : গুগল দ্বারা, আমি যা সংগ্রহ করি তার থেকে আলাদা স্বরলিপি ব্যবহার করে, সম্ভবত এটির জন্য মূল্যবান।

সম্পর্কিত প্যাকেজ / প্রকল্পসমূহ :

  • টাইপশেড: অফিসিয়াল পাইথন রেপো স্ট্যান্ডার্ড লাইব্রেরির জন্য স্টাব ফাইলগুলির একটি ভাণ্ডার হাউজিং।

typeshedপ্রকল্পের আসলে সেরা জায়গা কেমন টাইপ হিন্টিং হচ্ছে আপনার নিজস্ব একটি প্রকল্পে ব্যবহার করা যেতে পারে দেখতে সন্ধান করতে পারেন মধ্যে অন্যতম। একটি উদাহরণ হিসাবে আসুন নিতে এর dunders বর্গ সংশ্লিষ্ট মধ্যে ফাইল:__init__Counter.pyi

class Counter(Dict[_T, int], Generic[_T]):
        @overload
        def __init__(self) -> None: ...
        @overload
        def __init__(self, Mapping: Mapping[_T, int]) -> None: ...
        @overload
        def __init__(self, iterable: Iterable[_T]) -> None: ...

যেখানে _T = TypeVar('_T')জেনেরিক ক্লাস সংজ্ঞায়িত করতে ব্যবহৃত হয় । জন্য Counterবর্গ আমরা দেখতে পারি যে এটা হয়, তার সূচনাকারী মধ্যে কোন যুক্তি নিতে একটি একক পেতে পারেন Mappingএকটি কোনো ধরণ থেকে int বা একটি নিতে Iterableযেকোনো ধরনের।


বিজ্ঞপ্তি : একটি জিনিস আমি উল্লেখ করতে ভুলে গেছি তা হল typingমডিউলটি অস্থায়ী ভিত্তিতে চালু করা হয়েছিল । পিইপি 411 থেকে :

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

তাই এখানে এক চিমটি নুন দিয়ে জিনিসগুলি নিয়ে যান; আমি সন্দেহ করি এটি মুছে ফেলা হবে বা উল্লেখযোগ্য উপায়ে পরিবর্তন করা হবে তবে এটি কখনই জানতে পারে না।


** অন্য একটি বিষয় পুরোপুরি তবে টাইপ-ইঙ্গিতগুলির পরিধিতে বৈধ PEP 526:: পরিবর্তনশীল টীকাগুলির জন্য সিনট্যাক্স হল একটি # typeনতুন সিনট্যাক্স প্রবর্তন করে মন্তব্যগুলিকে প্রতিস্থাপনের একটি প্রচেষ্টা যা ব্যবহারকারীদেরকে সাধারণ varname: typeবিবৃতিতে ভেরিয়েবলের ধরণের টীকায়িত করতে দেয় ।

পাইথন ৩.6-এ পরিবর্তনীয় টীকাগুলি কী কী দেখুন ? যেমন পূর্বে উল্লিখিত হয়েছে, এগুলির জন্য একটি ছোট পরিচয়ের জন্য।


3
"পাইথনের অত্যন্ত গতিশীল প্রকৃতির কারণে, কোন বস্তুর ব্যবহার অনুমান করা বা তা পরীক্ষা করা বিশেষত শক্ত hard" আপনি স্থির চেকিংয়ের কথা উল্লেখ করছেন, তাই না?
বিসাম

53

জিমের বিস্তৃত উত্তরে যুক্ত করা:

typingমডিউলটি পরীক্ষা করুন - এই মডিউলটি পিইপি 484 দ্বারা নির্দিষ্ট হিসাবে ইঙ্গিতগুলিকে সমর্থন করে ।

উদাহরণস্বরূপ, নীচের ফাংশনটি ধরণের মান গ্রহণ করে এবং প্রদান করে strএবং নীচে বর্ণিত হয়:

def greeting(name: str) -> str:
    return 'Hello ' + name

typingমডিউল এছাড়াও সমর্থন করে:

  1. এলিয়াসিং টাইপ করুন
  2. কলব্যাক ফাংশনগুলির জন্য ইঙ্গিত লিখুন ।
  3. জেনেরিক্স - ধারক উপাদানগুলির জন্য প্রত্যাশিত প্রকারগুলি বোঝাতে সাবস্ক্রিপশন সমর্থন করার জন্য অ্যাবস্ট্রাক্ট বেস ক্লাসগুলি বাড়ানো হয়েছে।
  4. ব্যবহারকারী-সংজ্ঞায়িত জেনেরিক প্রকার - একটি ব্যবহারকারী-সংজ্ঞায়িত শ্রেণিকে জেনেরিক শ্রেণি হিসাবে সংজ্ঞায়িত করা যায়।
  5. যে কোনও প্রকার - প্রতিটি প্রকার যেকোন একটির একটি উপপ্রকার।

26

সদ্য প্রকাশিত পাইচার্ম 5 টাইপ ইঙ্গিতকে সমর্থন করে। এটি সম্পর্কে তাদের ব্লগ পোস্টে ( পাইথারামে পাইথন 3.5 প্রকারের ইঙ্গিতটি দেখুন 5 ) কী ধরণের ইঙ্গিতগুলি সেগুলি সম্পর্কে দুর্দান্ত ব্যাখ্যা দেয় এবং কীভাবে সেগুলি আপনার কোডটিতে ব্যবহার করতে হয় তার জন্য বেশ কয়েকটি উদাহরণ এবং চিত্রের সাথে নেই।

অতিরিক্ত হিসাবে, এটি পাইথন ২.7 এ সমর্থিত, যেমনটি এই মন্তব্যে ব্যাখ্যা করা হয়েছে :

পাইকার্ম পাইথন ২.7, পাইথন ৩.২-৩.৪ এর জন্য পাইপআই থেকে টাইপিং মডিউল সমর্থন করে। ২.7 এর জন্য আপনাকে * .pyi স্টাব ফাইলগুলিতে টাইপ ইঙ্গিত রাখতে হবে যেহেতু পাইথন 3.0.০ এ ফাংশন টীকাগুলি যুক্ত করা হয়েছিল


0

টাইপ ইঙ্গিতটি একটি গতিশীল ভাষার সাম্প্রতিক সংযোজন যেখানে দশক ধরে লোকেরা হাঙ্গেরীয়ের মতো নামকরণের কনভেনশনগুলিতে শপথ করে (প্রথম অক্ষরের সাথে বি লেবেল বি = বুলিয়ান, সি = অক্ষর, ডি = অভিধান, আই = পূর্ণসংখ্যা, এল = তালিকা, এন = সংখ্যা , s = স্ট্রিং, টি = টিপল) খুব বেশি জটিল ছিল না, তবে এখন সিদ্ধান্ত নিয়েছে যে ওহ অপেক্ষা করুন ... অবজেক্টগুলি সনাক্ত করতে ভাষা (টাইপ ()) ব্যবহার করা এবং আমাদের অভিনব IDEs খুব বেশি সমস্যা is জটিল যে কোনও কিছু করতে সহায়তা প্রয়োজন, এবং গতিশীলরূপে নির্ধারিত অবজেক্টের মানগুলি যে কোনও উপায়ে একেবারে অকেজো করে তোলে, অন্যদিকে কোনও সাধারণ নামকরণ কনভেনশন এটি কেবলমাত্র এক নজরে কোনও বিকাশকারীকে সমাধান করতে পারত।


স্পষ্ট করে বলতে গেলে, এটি উত্তরের চেয়ে রেন্টের মতো শোনাচ্ছে।
দিমিত্রিস ফাসারাকিস হিলিয়ার্ড

-1

টাইপ-ইঙ্গিতগুলি রক্ষণাবেক্ষণের জন্য এবং পাইথন দ্বারা ব্যাখ্যা করা যায় না। নীচের কোডে, লাইনটি def add(self, ic:int)পরবর্তী return...লাইন পর্যন্ত ত্রুটির ফল দেয় না :

class C1:
    def __init__(self):
        self.idn = 1
    def add(self, ic: int):
        return self.idn + ic
    
c1 = C1()
c1.add(2)

c1.add(c1)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "<input>", line 5, in add
TypeError: unsupported operand type(s) for +: 'int' and 'C1'
 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.