bonfy / problems

record problems I have met and solved
2 stars 1 forks source link

Python中的ABC类 #12

Open bonfy opened 7 years ago

bonfy commented 7 years ago

Python中的abc类是干嘛的,用来做什么

bonfy commented 7 years ago

https://zhidao.baidu.com/question/288636207.html

abc模块作用 Python本身不提供抽象类和接口机制,要想实现抽象类,可以借助abc模块。ABC是Abstract Base Class的缩写。

抽象方法是基类中定义的方法,但却没有任何实现。在java中,可以把方法申明成一个接口。而在python中实现一个抽象方法的简单的方法是:

class Sheep(object):   def get_size(self):    raise NotImplementedError

任何从Sheep继承下来的子类必须实现get_size方法。否则就会产生一个错误。但这种实现方法有个缺点。定义的子类只有调用那个方法时才会抛错。这里有个简单方法可以在类被实例化后触发它。使用python提供的abc模块。

  import abc   class Sheep(object):    metaclass = abc.ABCMeta   @abc.absractmethod   def get_size(self):    return

这里实例化Sheep类或任意从其继承的子类(未实现get_size)时候都会抛出异常。 因此,通过定义抽象类,可以定义子类的共同method(强制其实现)。