Base
ในรหัสต่อไปนี้ฉันจะสร้างฐานระดับนามธรรม ฉันต้องการให้คลาสทั้งหมดที่สืบทอดมาBase
เพื่อจัดหาname
คุณสมบัติดังนั้นฉันจึงสร้างคุณสมบัตินี้เป็น@abstractmethod
.
จากนั้นฉันก็สร้างคลาสย่อยที่Base
เรียกว่าBase_1
ซึ่งมีไว้เพื่อจัดหาฟังก์ชันการทำงานบางอย่าง แต่ยังคงเป็นนามธรรม ไม่มีname
คุณสมบัติในBase_1
แต่อย่างไรก็ตาม python จะติดตั้งอ็อบเจ็กต์ของคลาสนั้นโดยไม่มีข้อผิดพลาด หนึ่งสร้างคุณสมบัติที่เป็นนามธรรมได้อย่างไร?
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
จะกลับไปใช้วิธีการ