ব্যবহারকারীর সংজ্ঞায়িত ক্লাসগুলির সাথে ইঙ্গিতগুলি টাইপ করুন


113

একটি নির্দিষ্ট উত্তর খুঁজে পাওয়া যায়নি। আমি কোনও ফাংশনের জন্য টাইপ ইঙ্গিত করতে চাই এবং টাইপটি এমন কিছু কাস্টম ক্লাস যা আমি সংজ্ঞায়িত করেছি, এটি বলে CustomClass()

এবং তারপর আসুন কিছু ফাংশন বলুন, এটি কল FuncA(arg), আমার একটি যুক্তি নাম আছে arg। ইঙ্গিতটি টাইপ করার সঠিক উপায়টি হ'ল FuncA:

def FuncA(arg: CustomClass):

বা এটি হবে:

def FuncA(Arg:Type[CustomClass]):?

উত্তর:


139

সাবেক সঠিক , যদি argএকটি গ্রহণ দৃষ্টান্তCustomClass :

def FuncA(arg: CustomClass):
    #     ^ instance of CustomClass

আপনি যদি ক্লাস CustomClassনিজেই (বা একটি সাব টাইপ ) চান তবে আপনার লিখতে হবে:

from typing import Type  # you have to import Type

def FuncA(arg: Type[CustomClass]):
    #     ^ CustomClass (class object) itself

এটি টাইপিং সম্পর্কে ডকুমেন্টেশনে লেখা আছে :

class typing.Type(Generic[CT_co])

এর সাথে বর্ণিত একটি পরিবর্তনশীল Cধরণের মান গ্রহণ করতে পারে C। বিপরীতে, পরিবর্তিতType[C] একটি ভেরিয়েবল মানগুলি নিজেরাই শ্রেণি হিসাবেC গ্রহণ করতে পারে - বিশেষত, এটি শ্রেণীর অবজেক্ট গ্রহণ করবে ।

ডকুমেন্টেশনে intক্লাসের সাথে একটি উদাহরণ রয়েছে :

a = 3         # Has type 'int'
b = int       # Has type 'Type[int]'
c = type(a)   # Also has type 'Type[int]'

4
কি Typepy3.6 এবং তার পরেও থেকে? আমি শুধু একটি পেতে NameError
cs95

4
নোট করুন যে আপনার যদি একই ফাইলে ক্লাস থাকে তবে টাইপ ইঙ্গিতটি মূল্যায়নের সময় উপস্থিত থাকা দরকার ...
576i

14
@ 576i: আইরিচ, আপনি একটি স্ট্রিংও ব্যবহার করতে পারেন। সুতরাং এটি তাত্ক্ষণিকভাবে টাইপ লোড প্রয়োজন হয় না যে def foo(bar: 'Qux')সমতুল্য def foo(bar: Qux)
উইলেম ভ্যান অনসেম

4
@ উইলিম ধন্যবাদ - আমি এটি জানতাম না। সর্বোত্তম, পাইচার্ম স্বতঃপূরণ এখনও কাজ করে ..
576i

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