उपयोगकर्ता परिभाषित कक्षाओं के साथ संकेत टाइप करें


103

निश्चित उत्तर नहीं मिल रहा है। मैं एक फ़ंक्शन के लिए एक प्रकार का संकेत करना चाहता हूं और प्रकार कुछ कस्टम वर्ग है जिसे मैंने परिभाषित किया है, इसे कहा जाता है CustomClass()

और फिर किसी फ़ंक्शन में कहते हैं FuncA(arg), इसे कॉल करें , मेरे पास एक तर्क है जिसका नाम है arg। संकेत टाइप करने का सही तरीका FuncAहोगा:

def FuncA(arg: CustomClass):

या होगा:

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

जवाबों:


125

पूर्व सही है , अगर 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]'

1
है Typepy3.6 और उससे आगे से? मैं अभी मिलता हूं NameError
cs95

3
ध्यान दें कि यदि आपके पास एक ही फ़ाइल में कक्षा है, तो उस समय मौजूद होना चाहिए जिस प्रकार के संकेत का मूल्यांकन किया जाता है ...
576i

13
@ 576i: iirc, आप एक स्ट्रिंग का उपयोग भी कर सकते हैं। तो def foo(bar: 'Qux')यह def foo(bar: Qux)सिवाय इसके बराबर है कि इसे तुरंत लोड करने की आवश्यकता नहीं है।
विलेम वैन ओन्सेम

2
@ विल धन्यवाद - मुझे नहीं पता था कि। क्या सबसे अच्छा है, pycharm स्वतः पूर्णता अभी भी काम करती है ..
576i

3
@ सीएस 95 हाँ। सभी प्रकार के संकेत +3.7 हैं।
तेरस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.