ओब्जे-सी (जिसे मैंने लंबे समय तक उपयोग नहीं किया है) में कक्षाओं का विस्तार करने के लिए categories कहा जाता है। नई विधियों के साथ एक श्रेणी घोषित करना और इसे अपने प्रोग्राम में संकलित करना, कक्षा के सभी उदाहरणों में अचानक नई विधियां हैं।पायथन में Obj-C श्रेणियां कैसे करें?
पायथन में मिश्रित संभावनाएं हैं, जिनका मैं उपयोग करता हूं, लेकिन मिश्रण के कार्यक्रम से मिश्रण का उपयोग किया जाना चाहिए: कक्षा को इसे स्वयं घोषित करना है।
फोरसीन श्रेणी का उपयोग-मामला: कहें कि आपके पास एक बड़ी श्रेणी पदानुक्रम है जो डेटा के साथ बातचीत करने के विभिन्न तरीकों का वर्णन करता है, विभिन्न गुणों पर प्राप्त करने के लिए पॉलिमॉर्फिक तरीकों की घोषणा करता है। अब एक श्रेणी इन तरीकों तक पहुंचने के लिए एक सुविधाजनक इंटरफेस को लागू करके इन वर्णन वर्गों के उपभोक्ता की मदद कर सकती है। (उदाहरण के लिए एक श्रेणी विधि दो अलग-अलग तरीकों का प्रयास कर सकती है और पहले परिभाषित (गैर-कोई नहीं) वापसी मान वापस कर सकती है।)
पायथन में ऐसा करने का कोई तरीका?
व्याख्यात्मक कोड
मैं आशा इस स्पष्ट किया मैं क्या मतलब है। मुद्दा यह है कि श्रेणी एक समग्र इंटरफ़ेस की तरह है, कि AppObj का उपभोक्ता में कोड में बदल सकता है।
class AppObj (object):
"""This is the top of a big hierarchy of subclasses that describe different data"""
def get_resource_name(self):
pass
def get_resource_location(self):
pass
# dreaming up class decorator syntax
@category(AppObj)
class AppObjCategory (object):
"""this is a category on AppObj, not a subclass"""
def get_resource(self):
name = self.get_resource_name()
if name:
return library.load_resource_name(name)
else:
return library.load_resource(self.get_resource_location())
अपने उदाहरण में, आप AppObj या AppObjCategory का दृष्टांत हैं? बीटीडब्ल्यू पायथन में कक्षा सजावटकर्ता अब 2.6 में हैं: http://docs.python.org/whatsnew/2.6.html#pep-3129-class-decorators –
मैं AppObj (और इसके सबक्लास) को तुरंत चालू करता हूं। श्रेणी कोड पूरी तरह से अलग हो सकता है (यानी AppObj लाइब्रेरी में हो सकता है, एप्लिकेशन में श्रेणी)। – u0b34a0f6ae
शायद यह श्रेणी श्रेणी सजावट को लागू करने के लिए बस एक मामला है; श्रेणी से बेस क्लास में सभी विशेषताओं की प्रतिलिपि बनाएँ, जैसे कुछ विशेषताएं .. __doc__ और __dict__? – u0b34a0f6ae