Was ist ein guter Weg, um etwas Ähnliches zu einer Schnittstelle in Python zu implementieren?

Was ist ein guter Weg, um etwas wie eine Delphi / C # –Schnittstelle oder eine abstrakte Klasse in Python zu implementieren? Eine Klasse, die alle ihre Unterklassen zwingen wird, einen bestimmten Satz von Methoden umzusetzen?

One Solution collect form web for “Was ist ein guter Weg, um etwas Ähnliches zu einer Schnittstelle in Python zu implementieren?”

Der einfachste Weg, dies zu tun ist, die abstrakte Basisklassenimplementierung zu verwenden, die seit Version 2.7 in Python enthalten ist.

Damit können Sie eine Basisklasse als abstrakt markieren, indem Sie die abc.ABCMeta . Sie können dann Methoden und Eigenschaften als abstrakt markieren. Wenn Sie eine Klasse mit der ABCMeta Metaklasse (oder einer ihrer Unterklassen) instanziieren, wird eine Ausnahme ausgelöst, wenn irgendwelche abstrakten Eigenschaften oder Methoden in der Instanz undefiniert bleiben.

z.B

 >>> 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> >>> 

Die Prüfung erfolgt nur, wenn die Klasse instanziiert wird, weil es vollkommen legitim ist, eine Unterklasse zu haben, die nur einige der abstrakten Methoden implementiert und daher selbst eine abstrakte Klasse ist.

  • Wie kann man die Art der verschachtelten Datenstrukturen in Python bestimmen?
  • Gibt es eine gängige Möglichkeit, Python zu überprüfen, wenn ein Objekt ein beliebiger Funktionstyp ist?
  • Richtige Methode zur Erkennung von Sequenzparametern?
  • Wie prüft man, ob Typ einer Variable String ist?
  • Was ist der Unterschied zwischen alten Stil und neuen Stil Klassen in Python?
  • "Werttyp" aus einem String in Python bestimmen
  • Kann ich benutzerdefinierte Methoden / Attribute zu eingebauten Python-Typen hinzufügen?
  • Mapping einer (Lambda) -Funktion auf Listen von Strings fehlschlägt 'float' Objekt nicht iterable
  • Python: die meisten pythonischen Weg zu überprüfen, ob ein Objekt eine Zahl ist
  • Wie man dtypes nach Spalte in pandas DataFrame setzt
  • Wie kann ich den Typ eines Objekts in Python vergleichen?
  • Python ist die beste Programmiersprache der Welt.