Vec*_*tor 2 python types interface
在Python中实现类似于Delphi / C#接口或抽象类的好方法是什么?一个会强制其所有子类实现特定方法集的类?
最简单的方法是使用自2.7版以来Python中已包含的抽象基类实现。
这使您可以通过使用abc.ABCMeta元类将基类标记为抽象。然后,您可以将方法和属性标记为抽象。当用ABCMeta元类(或其任何子类)实例化一个类时,如果实例中未定义任何抽象属性或方法,将引发异常。
例如
>>> from abc import ABCMeta, abstractmethod
>>> class Foo(object):
__metaclass__ = ABCMeta
@abstractmethod
def bar(self): pass
>>> class BadFoo(Foo):
pass
>>> BadFoo()
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
BadFoo()
TypeError: Can't instantiate abstract class BadFoo with abstract methods bar
>>> class GoodFoo(Foo):
def bar(self):
return 42
>>> GoodFoo()
<__main__.GoodFoo object at 0x027354B0>
>>>
Run Code Online (Sandbox Code Playgroud)
仅当实例化该类时才进行检查,因为拥有仅实现某些抽象方法的子类是完全合法的,因此它本身就是一个抽象类。
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |