Python中的纯虚拟方法
在Python中实现纯虚拟方法的思想正确的方法是什么 只是在方法中提出了Python中的纯虚拟方法,python,oop,inheritance,virtual-functions,Python,Oop,Inheritance,Virtual Functions,在Python中实现纯虚拟方法的思想正确的方法是什么 只是在方法中提出了未实现的错误 还是有更好的办法 谢谢大家! 虽然这并不少见,但有些人会认为“正确”的方法(因为python 2.6)是通过以下方式使用抽象基类: 使用abc比使用NotImplementedError有两个主要(潜在)优势 首先,您将无法实例化抽象类(不需要\uuuu init\uuuuhacks): >>MyAbstractClass() 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:无法使用
未实现的错误
还是有更好的办法
谢谢大家! 虽然这并不少见,但有些人会认为“正确”的方法(因为python 2.6)是通过以下方式使用抽象基类:
使用
abc
比使用NotImplementedError
有两个主要(潜在)优势
首先,您将无法实例化抽象类(不需要\uuuu init\uuuu
hacks):
>>MyAbstractClass()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:无法使用抽象方法my\u abstract\u方法实例化抽象类MyAbstractClass
其次,您将无法实例化任何未实现所有抽象方法的子类:
>>> 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
类MyConcreteClass(MyAbstractClass):
... 通过
...
>>>MyConcreteClass()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:无法使用抽象方法my\u abstract\u方法实例化抽象类MyConcreteClass
>>> 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