Ich kenne mich mit OpenGL nicht wirklich aus, würde aber erwarten, dass bei Angabe des Identifiers eher ein bereits erstelltes Objekt aus einem Cache zurückgeliefert wird. Als Minimum würde ich zumindest erwarten, dass ich nicht munter neue Typen für bereits verwendete Identifier angeben kann. Du könntest dir bereits erstellte Objekte evtl in einem *Klassen*attribut von `GLObject` als Dictionary merken und `.from_id()` diese zurückliefern lassen. Letzteres würde ich dann auch eher als `@staticmethod` definieren. Dein jetziger Code sieht mehr nach nem Hack aus, der irgendwie die Tatsache umschiffen muss, dass `@classmethod`s eigentlich so gedacht sind, dass tatsächlich Objekte der jeweiligen Klasse erzeugt werden und nicht etwa des Basistyps. Ich lehne mich mal soweit aus dem Fenster, dass ich das Design in seiner jetzigen Form schon fast als kaputt ansehen würde. Außer natürlich, falls ich den Sinn dieser Identifier völlig fehlinterpretiert habe. Dann will ich nichts gesagt haben...
EDIT: Um's nochmal deutlich zu sagen: Falls es darum geht, neu erstellte Objekte mit Kennungen zu versehen, dann würde ich in den Signaturen der verschiedenen Typen durchaus den `identifier` als letztes Argument mitschleppen. Ich weiß z.B. von Qt, dass man da auch in vielen Signaturen ein `parent`-Argument am Ende findet (auch wenn ich hier sicherlich Äpfel mit Birnen vergleiche). Wenn aber auf bereits erstellte Objekte über ihren jeweiligen Identifier zugegriffen werden soll, dann wäre eine statische Methode - oder sogar eine simple Funktion auf Modulebene - besser. Ich hoffe einfach mal, wir reden jetzt nicht zu sehr aneinander vorbei. Vielleicht willst du ja ein paar Erläuterungen zur Verwendungsweise dieser Identifier geben...