निम्नलिखित कोड में, मैं एक आधार सार वर्ग बनाता हूं Base। मुझे वह सभी वर्ग चाहिए जो संपत्ति Baseप्रदान करने के लिए विरासत में मिले name, इसलिए मैंने इस संपत्ति को ए @abstractmethod।
फिर मैंने एक उप-वर्ग बनाया Base, जिसे कहा जाता है Base_1, जो कुछ कार्यक्षमता की आपूर्ति करने के लिए है, लेकिन अभी भी सार है। इसमें कोई nameसंपत्ति नहीं है Base_1, लेकिन फिर भी अजगर बिना किसी त्रुटि के उस वर्ग की एक वस्तु को उकसाता है। सार गुण कैसे बनता है?
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')
@propertyमेंclass C,nameएक विधि पर लौट जाएगा।