Ich habe „__metaclass__“ verwendet, um „abc.ABCMeta“ als Metaklasse einzurichten, aber nicht implementierte „@abstractmePython

Python-Programme
Anonymous
 Ich habe „__metaclass__“ verwendet, um „abc.ABCMeta“ als Metaklasse einzurichten, aber nicht implementierte „@abstractme

Post by Anonymous »

Ich habe Python-Dokumente über abstrakte Basisklassen gelesen:

Von hier:

Code: Select all

abc.abstractmethod(function)
Ein Dekorator, der abstrakte Methoden angibt.

Die Verwendung dieses Dekorators erfordert, dass die Metaklasse der Klasse ABCMeta ist oder
davon abgeleitet ist. Eine Klasse mit einer von ABCMeta abgeleiteten Metaklasse
kann nicht instanziiert werden, es sei denn, alle ihre abstrakten Methoden und
Eigenschaften werden überschrieben.


Und hier


Sie können den Dekorator @abstractmethod auf Methoden wie draw()
anwenden, die implementiert werden müssen; Python löst dann eine Ausnahme für
Klassen aus, die die Methode nicht definieren. Beachten Sie, dass die Ausnahme nur
ausgelöst wird, wenn Sie tatsächlich versuchen, eine Instanz einer Unterklasse
zu erstellen, der die Methode fehlt.


Ich habe diesen Code verwendet, um das zu testen:

Code: Select all

import abc

class AbstractClass(object):
__metaclass__ = abc.ABCMeta

@abc.abstractmethod
def abstractMethod(self):
return

class ConcreteClass(AbstractClass):
def __init__(self):
self.me = "me"

c = ConcreteClass()
c.abstractMethod()
Der Code funktioniert einwandfrei, daher verstehe ich ihn nicht. Wenn ich c.abstractMethod eingebe, erhalte ich:
Was mir hier fehlt? ConcreteClass muss die abstrakten Methoden implementieren, aber ich bekomme keine Ausnahme.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post