python中的抽象类,java抽象类和非抽象类的区别

  python中的抽象类,java抽象类和非抽象类的区别

  Python的抽象类和接口有什么区别?

  接口是对象上的一组方法和属性。

  在Python中,可以使用抽象基类来定义和实现接口。

  使用抽象基类

  例如,假设您想要使用collections模块的抽象基类。

  进口托收

  类myset (collections.set):

  及格

  尝试使用它将导致TypeError,因为创建的类不支持集合的预期行为。

  MySet())

  背景(mostrecentcalllast):

  文件中的第1行

  typeerror:不能tinstantiataabstractclassmysetwithabstractmethods

  __包含__,__iter__,__len__

  因此,必须至少实现__contains__、__iter__和__len__。让我们使用这个文档的实现例子。

  classlistbasedset(collections . set):

   alternateseimplementationfavoringspaceoverspeed

  和notrequiringthesetelementstobeshable .

  def __init__(self,iterable):

  self.elements=lst=[]

  对于iterable中的值:

  如果值不在列表中:

  LST.append(value))。

  def __iter__(self):

  返回迭代器(self.elements))。

  def __contains__(自身,值) :

  self.elements中的返回值

  def __len__(self):

  returnlen(self.elements)).

  S1=listbasedset(abcdef).

  S2=listbasedset(defghi ))))).

  重叠=s1 s2

  实现:创建一个抽象基类

  您可以通过将元类设置为abc来创建自己的抽象基类。ABCMeta并在相关方法中用abc.abstractmethod修饰它。类可以在__abstractmethods__属性中添加装饰函数,以防止实例化,直到它被定义。

  导入ABC

  例如,‘高效’被定义为可以用语言表达的东西。假设您想要定义一个可以在Python 2中执行的抽象基类:

  可分类(对象):

  __元类__=ABC。ABC元

  @abc.abstractmethod

  def __str__(self):

  raisenotimplementederror(usersmustdefine _ _ str _ _ tousethisbaseclass)).

  或者,在Python 3中,元类声明略有变化。

  class ffable(object,元类=abc。ABCMeta):

  @abc.abstractmethod

  def __str__(self):

  raisenotimplementederror(usersmustdefine _ _ str _ _ tousethisbaseclass)).

  现在,如果您尝试在不实现接口的情况下创建可用的对象,将会发生以下情况:

  classmyefffable(effable):

  及格

  尝试实例化它:

  MyEffable())

  背景(mostrecentcalllast):

  文件中的第1行

  typeerror:不能使用abstractmethods _ _ str _ _

  被告知我们还没有完成工作。

  现在,通过提供预期的接口,我们将遵守以下内容:

  classmyefffable(effable):

  def __str__(self):

  返回可扩展!

  您可以使用从抽象类派生的类的具体版本。

  me=MyEffable()

  是打印(我)

  快!

  还可以做其他的事情,比如注册实现这些接口的虚子类,但我认为这已经超出了这个问题的范围。但是,此处显示的其他方法需要使用abc模块来调整此方法。

  结论

  抽象基类的创建被证明定义了Python定制对象的接口。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: