Interfaces in Zope

Django, Flask, Bottle, WSGI, CGI…
Antworten
reinsn
User
Beiträge: 4
Registriert: Donnerstag 9. März 2006, 10:42

Donnerstag 9. März 2006, 10:45

Hallo,

wie aus der Dokumentation von ZopeX3 zu entnehmen ist, werden Interfaces definiert, indem man von "Interface" aus dem Modul zope.interface quasi erbt. Ich habe mir jetzt diese Modul näher angesehen und bemerkt, dass "Interface" ein Objektinstanz der Klasse InterfaceClass ist.

Jetzt lautet meine Frage, wie kann man generell von Objekten (!) erben? Ich dachte, man kann nur von Klassen erben,

vielen Dank für die Rückmeldung im Voraus!
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Donnerstag 9. März 2006, 10:58

Jetzt lautet meine Frage, wie kann man generell von Objekten (!) erben?
Klassen sind Objekte (also Instanzen), wie (fast) alles andere in Python auch, wobei im Gegensatz zu "normalen" Objekten Ihre Klasse nicht object (oder etwas davon abgeleitetes), sondern type (oder etwas davon abgeleitetes) ist.

Siehe auch die Diskussion über Metaklassen auf der Python Homepage, die noch ein bissel mehr Licht in das ganze bringen wird...

Generell von Objekten erben? Nein. Man kann nur von Objekten erben die als Klasse entweder type oder types.classtype (oder wie auch immer die old-style metaklasse heißt) haben.

EDIT: natürlich geht auch eine abgeleitete Klasse von type oder types.classtype als Klasse eines Klassen-Objekts so dass man von Ihr ableiten kann.
Zuletzt geändert von modelnine am Donnerstag 9. März 2006, 15:42, insgesamt 1-mal geändert.
--- Heiko.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Donnerstag 9. März 2006, 15:23

Stelle es dir grob so vor

Code: Alles auswählen

class Foo(Base):
  f = 42
wird als

Code: Alles auswählen

Foo = type('Foo', ('Base',), {'f': 42})
ausgeführt.

Objekte sind Instanzen von Klassen.
(Newstyle) Klassen sind Instanzen von Metaclassen, type ist so eine Metaklasse.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Donnerstag 9. März 2006, 15:45

Joghurt hat geschrieben:Stelle es dir grob so vor

Code: Alles auswählen

class Foo(Base):
  f = 42
wird als

Code: Alles auswählen

Foo = type('Foo', ('Base',), {'f': 42})
ausgeführt.

Objekte sind Instanzen von Klassen.
(Newstyle) Klassen sind Instanzen von Metaclassen, type ist so eine Metaklasse.
Falsch :-)

Code: Alles auswählen

Foo = type('Foo', (Base,), {'f': 42})
So wirds schon eher gehen ^^
TUFKAB – the user formerly known as blackbird
Antworten