Was ist die ideologisch korrekte Art und Weise rein virtuelle Methoden in Python zu implementieren?Reine virtuelle Methoden in Python
Nur NotImplementedError
in den Methoden erhöhen?
Oder gibt es einen besseren Weg?
Vielen Dank!
Was ist die ideologisch korrekte Art und Weise rein virtuelle Methoden in Python zu implementieren?Reine virtuelle Methoden in Python
Nur NotImplementedError
in den Methoden erhöhen?
Oder gibt es einen besseren Weg?
Vielen Dank!
Zwar ist es nicht ungewöhnlich, people using NotImplementedError
zu sehen, einige argumentieren, dass die „richtige“ Art und Weise, es zu tun (da Python 2.6) wird unter Verwendung einer abstrakte Basisklasse, durch die abc
module:
from abc import ABCMeta, abstractmethod
class MyAbstractClass(object):
__metaclass__=ABCMeta
@abstractmethod
def my_abstract_method():
pass
Es gibt zwei hauptsächliche (potenzielle) Vorteile bei der Verwendung von abc
gegenüber NotImplementedError
.
Erstens Sie werden nicht in der Lage sein, die abstrakte Klasse zu instanziiert (ohne dass __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
Zweitens, werden Sie nicht in der Lage sein, jede Unterklasse zu instanziiert, die nicht alle abstrakten nicht implementiert Methoden:
>>> 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