निम्नलिखित कोड में, मैं एक मूल सार वर्ग Base
बनाता हूं। संपत्ति प्रदान करने के लिए मुझे Base
से प्राप्त सभी कक्षाएं चाहिए, इसलिए मैंने इस संपत्ति को @abstractmethod
बनाया।पायथन सार कक्षाओं में अमूर्त गुण कैसे बनाएं
फिर मैंने Base
का उप-वर्ग बनाया, जिसे Base_1
कहा जाता है, जिसका अर्थ कुछ कार्यक्षमता प्रदान करना है, लेकिन फिर भी सार बना रहता है। Base_1
में कोई name
प्रॉपर्टी नहीं है, लेकिन फिर भी पाइथन बिना किसी त्रुटि के उस वर्ग के किसी ऑब्जेक्ट को इंस्टैटिनेट करता है। एक अमूर्त गुण कैसे बनाता है?
from abc import ABCMeta, abstractmethod
class Base(object):
__metaclass__ = ABCMeta
def __init__(self, strDirConfig):
self.strDirConfig = strDirConfig
@abstractmethod
def _doStuff(self, signals):
pass
@property
@abstractmethod
def name(self):
#this property will be supplied by the inheriting classes
#individually
pass
class Base_1(Base):
__metaclass__ = ABCMeta
# this class does not provide the name property, should raise an error
def __init__(self, strDirConfig):
super(Base_1, self).__init__(strDirConfig)
def _doStuff(self, signals):
print 'Base_1 does stuff'
class C(Base_1):
@property
def name(self):
return 'class C'
if __name__ == '__main__':
b1 = Base_1('abc')
पकड़ लिया: आप 'वर्ग C' में' डेकोरेटर का उपयोग करने के @ property' भूल जाते हैं, 'name' एक विधि पर लौट जाएगा। – kevinarpe