मान लीजिए कि मेरे पास एक सूट है और सूट के चार उपवर्ग हैं: हार्ट, स्पेड, डायमंड, क्लब।
class Suit:
...
class Heart(Suit):
...
class Spade(Suit):
...
class Diamond(Suit):
...
class Club(Suit):
...
मेरे पास एक विधि है जो एक पैरामीटर के रूप में एक सूट प्राप्त करती है, जो कि एक क्लास ऑब्जेक्ट है, उदाहरण के लिए नहीं। अधिक सटीक रूप से, यह चार मूल्यों में से केवल एक को प्राप्त कर सकता है: हार्ट, स्पेड, डायमंड, क्लब। मैं ऐसी बात कैसे सुनिश्चित कर सकता हूं? कुछ इस तरह:
def my_method(suit):
assert(suit subclass of Suit)
...
मैं पायथन 3 का उपयोग कर रहा हूं।
_class
बनाना suit_class
। मैंने एक प्रासंगिक प्रश्न में इस तरह के नामकरण सम्मेलन का प्रस्ताव रखा ।
my_method(Heart)
my_method(Spade)
...
inspect.isclass
या बस उपयोग कर सकते हैं isinstance(myvar, type)
, क्योंकि issubclass
यह एक गैर-वर्ग पास होने पर एक त्रुटि उत्पन्न करेगा। इस जवाब को देखें । मैंने नीचे दिए गए उत्तर पर टिप्पणी की होगी, लेकिन यह कभी भी दिन की रोशनी को नहीं देखा होगा।
my_method
पैरामीटर के रूप में प्राप्त कर सकते हैं: "यह चार मूल्यों में से केवल एक को प्राप्त कर सकता है: हार्ट, स्पेड, डायमंड, क्लब"। वे मूल्य वर्ग वस्तुएं हैं, वर्ग उदाहरण नहीं। यह मुझे बहुत स्पष्ट लगता है, हालांकि मुझे लगता है कि आप अस्पष्टता के बारे में सही हैं क्योंकि उत्तर दोनों संभावनाओं को कवर करते हैं। यदि आपके पास इसके लिए एक स्पष्ट शब्द है, तो प्रश्न को संपादित करने के लिए आपका स्वागत है। टिप्पणी के लिए धन्यवाद।