निम्नलिखित कोड में, मैं एक आधार सार वर्ग बनाता हूं 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
एक विधि पर लौट जाएगा।