खोज…


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

मिक्स का उपयोग कस्टम प्लगइन्स को परिभाषित करने के लिए किया जा सकता है।

अजगर 3.x 3.0
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 । नतीजतन, यह सुविधा सरल प्लगइन्स बनाने की अनुमति देती है । यहां हम एक पूर्व उदाहरण को संशोधित करके इस सुविधा को प्रदर्शित करते हैं:

अजगर 3.x 3.6
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]


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow