AFAIU, आप यह सुनिश्चित करना चाहते हैं कि कुछ ऑब्जेक्ट वास्तविक उपयोग की तुलना में पहले के समय में "इंटरफ़ेस का पालन करें") व्यवहार करें। आपके उदाहरण में, आप जानना चाहते हैं कि ऑब्जेक्ट्स निर्माण समय पर उपयुक्त हैं, न कि वास्तव में जब उनका उपयोग किया जाएगा।
ध्यान में रखते हुए कि हम पाइथन से बात कर रहे हैं, मैं assert
का सुझाव नहीं दूंगा (यदि python -O
या पर्यावरण परिवर्तक PYTHONOPTIMIZE आपके प्रोग्राम के दौरान 1 पर सेट है?) या विशिष्ट प्रकार के लिए जाँच (क्योंकि है कि अनावश्यक रूप से प्रकार आप उपयोग कर सकते हैं) को प्रतिबंधित करता है, लेकिन मैं प्रारंभिक परीक्षण कार्यक्षमता, पंक्तियों के साथ कुछ सुझाव देगा:
def __init__(self, a_number, a_boolean, a_duck, a_sequence):
self.a_number= a_number + 0
self.a_boolean= not not a_boolean
try:
a_duck.quack
except AttributeError:
raise TypeError, "can't use it if it doesn't quack"
else:
self.a_duck= a_duck
try:
iter(a_sequence)
except TypeError:
raise TypeError, "expected an iterable sequence"
else:
self.a_sequence= a_sequence
मैं इस सुझाव में try… except… else
इस्तेमाल किया क्योंकि मैं चाहता हूँ उदाहरण सफल होने पर केवल सेट करें, यदि कोड सफल हो गया हो, भले ही कोड बदल दिया गया हो या बढ़ाया गया हो। जाहिर है, आपको ऐसा करने की ज़रूरत नहीं है।
फ़ंक्शन तर्क और सेटिंग गुणों के लिए, मैं पहले से ही इन परीक्षणों को नहीं करता, मैं केवल प्रदान की गई वस्तुओं का उपयोग करता हूं और फेंकने वाले अपवादों पर कार्य करता हूं, जब तक संदिग्ध वस्तुओं को लंबी प्रक्रिया के बाद उपयोग नहीं किया जा रहा हो।
पायथन प्रकार विफल रहता है - स्केल नहीं करता है; मैं मोनो का उपयोग करूंगा। –