作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 Python 中实现纯虚方法的思想上正确的方法是什么?
只是在方法中引发NotImplementedError
?
或者有更好的方法吗?
谢谢!
最佳答案
虽然看到 people using NotImplementedError
并不少见,有些人会争辩说,“正确”的做法(自 python 2.6 起)是通过 abc
module 使用抽象基类 :
from abc import ABCMeta, abstractmethod
class MyAbstractClass(object):
__metaclass__=ABCMeta
@abstractmethod
def my_abstract_method():
pass
与使用 NotImplementedError
相比,使用 abc
有两个主要(潜在)优势。
首先,您将无法实例化抽象类(不需要 __init__
hacks):
>>> MyAbstractClass()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class MyAbstractClass with abstract methods my_abstract_method
其次,您将无法实例化任何未实现所有抽象方法的子类:
>>> class MyConcreteClass(MyAbstractClass):
... pass
...
>>> MyConcreteClass()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class MyConcreteClass with abstract methods my_abstract_method
关于python - Python 中的纯虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21610836/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!