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!
Interfaces in Zope
-
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
- Kontaktdaten:
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.Jetzt lautet meine Frage, wie kann man generell von Objekten (!) erben?
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.
Stelle es dir grob so vor wird als ausgeführt.
Objekte sind Instanzen von Klassen.
(Newstyle) Klassen sind Instanzen von Metaclassen, type ist so eine Metaklasse.
Code: Alles auswählen
class Foo(Base):
f = 42
Code: Alles auswählen
Foo = type('Foo', ('Base',), {'f': 42})
Objekte sind Instanzen von Klassen.
(Newstyle) Klassen sind Instanzen von Metaclassen, type ist so eine Metaklasse.
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
FalschJoghurt hat geschrieben:Stelle es dir grob so vorwird alsCode: Alles auswählen
class Foo(Base): f = 42
ausgeführt.Code: Alles auswählen
Foo = type('Foo', ('Base',), {'f': 42})
Objekte sind Instanzen von Klassen.
(Newstyle) Klassen sind Instanzen von Metaclassen, type ist so eine Metaklasse.

Code: Alles auswählen
Foo = type('Foo', (Base,), {'f': 42})
TUFKAB – the user formerly known as blackbird