Python Language
प्लगइन और एक्सटेंशन क्लासेस
खोज…
mixins
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग लैंग्वेज में, एक मिक्सिन एक ऐसा वर्ग होता है, जिसमें अन्य वर्गों द्वारा उपयोग किए जाने की विधियाँ होती हैं, उन अन्य वर्गों की मूल कक्षा होने के बिना। उन अन्य वर्गों को मिक्सिन के तरीकों तक पहुंच कैसे प्राप्त होती है यह भाषा पर निर्भर करता है।
यह कई वर्गों को सामान्य कार्यक्षमता का उपयोग करने की अनुमति देकर कई विरासत के लिए एक तंत्र प्रदान करता है, लेकिन कई विरासत के जटिल शब्दार्थों के बिना। जब एक प्रोग्रामर विभिन्न वर्गों के बीच कार्यक्षमता साझा करना चाहता है तो मिश्रण उपयोगी होते हैं। एक ही कोड को बार-बार दोहराने के बजाय, सामान्य कार्यक्षमता को केवल एक मिक्सिन में समूहीकृत किया जा सकता है और फिर प्रत्येक वर्ग में विरासत में मिला होता है।
जब हम एक से अधिक मिक्सिंस का उपयोग करते हैं, तो मिक्स के ऑर्डर महत्वपूर्ण होते हैं। ये रहा एक सरल उदाहरण:
class Mixin1(object):
def test(self):
print "Mixin1"
class Mixin2(object):
def test(self):
print "Mixin2"
class MyClass(Mixin1, Mixin2):
pass
इस उदाहरण में हम MyClass
और test
विधि कहते हैं,
>>> obj = MyClass()
>>> obj.test()
Mixin1
परिणाम Mixin1 होना चाहिए क्योंकि ऑर्डर दाएं से बाएं है। यह तब अप्रत्याशित परिणाम दिखा सकता है जब सुपर क्लास इसके साथ जुड़ते हैं। इस तरह रिवर्स ऑर्डर अधिक अच्छा है:
class MyClass(Mixin2, Mixin1):
pass
परिणाम होगा:
>>> obj = MyClass()
>>> obj.test()
Mixin2
मिक्स का उपयोग कस्टम प्लगइन्स को परिभाषित करने के लिए किया जा सकता है।
class Base(object):
def test(self):
print("Base.")
class PluginA(object):
def test(self):
super().test()
print("Plugin A.")
class PluginB(object):
def test(self):
super().test()
print("Plugin B.")
plugins = PluginA, PluginB
class PluginSystemA(PluginA, Base):
pass
class PluginSystemB(PluginB, Base):
pass
PluginSystemA().test()
# Base.
# Plugin A.
PluginSystemB().test()
# Base.
# Plugin B.
अनुकूलित कक्षाओं के साथ प्लगइन्स
अजगर 3.6 में, पीईपी 487 जोड़ा __init_subclass__
विशेष विधि है, जो सरल और उपयोग किए बिना वर्ग अनुकूलन फैली metaclasses । नतीजतन, यह सुविधा सरल प्लगइन्स बनाने की अनुमति देती है । यहां हम एक पूर्व उदाहरण को संशोधित करके इस सुविधा को प्रदर्शित करते हैं:
class Base:
plugins = []
def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
cls.plugins.append(cls)
def test(self):
print("Base.")
class PluginA(Base):
def test(self):
super().test()
print("Plugin A.")
class PluginB(Base):
def test(self):
super().test()
print("Plugin B.")
परिणाम:
PluginA().test()
# Base.
# Plugin A.
PluginB().test()
# Base.
# Plugin B.
Base.plugins
# [__main__.PluginA, __main__.PluginB]