抽象超类:
>>> class Super(): #建立一个抽象超类 def display(self): self.action() def action(self): #这是一个抽象方法 raise NotImplementedError('aciton must be defined') #raise强制抛出异常 >>> class Subclass(Super): #建立子类,并且补全抽象方法 def action(self): print('This is Subclass') >>> test = Super() >>> test.display() ... NotImplementedError: aciton must be defined >>> tes=Subclass() #建立子类对象实例 >>> tes.display() This is Subclass
声明一个抽象超类:
#python3.0 from abc import ABCMeta,abstractmethod >>> class Super(metaclass=ABCMeta): #通过关键字参数 metaclass=ABCMeta 和 下面的 @特殊装饰器语法做一个抽象声明 @abstractmethod def method(self): pass >>> x=Super() #声明后的抽象超类无法创建实例对象 ... TypeError: Can't instantiate abstract class Super with abstract methods method >>> >>> class Subclass(Super): pass >>> y=Subclass() #子类必须覆写抽象超类中的抽象方法,否则还是会抛出TypeError ... TypeError: Can't instantiate abstract class Subclass with abstract methods method >>> class SubClass(Super): def method(self): print('class is over.') >>> z = SubClass() >>> z.method() class is over. #python2.6 方式略有不同 class Super(): __metaclass__ = ABCMeta def method(self): pass
查询类属性:
>>> z.__dict__ {} >>> z.__class__ <class '__main__.SubClass'> >>> SubClass.__bases__ #__bases__ 查询超类 (<class '__main__.Super'>,) >>> Super.__bases__ (<class 'object'>,)
浙公网安备 33010602011771号