Gibt es eine Möglichkeit zum erstellen von Unterklassen on-the-fly?
Bin ich, ein Spiel zu schaffen, in dem habe ich eine etwas komplexere Methode für die Erstellung von Entitäten.
Wenn ein level geladen, das laden von code liest eine Reihe von YAML-Dateien, die die Attribute enthalten, die von all den verschiedenen Einheiten möglich. Mit der YAML-Datei, erstellt es eine so genannte EntityResource
Objekt. Diese EntityResource-Objekt fungiert als die maßgebliche Quelle der Informationen, wenn Sie laichen neue Einheiten. Das Ziel ist ein zweifaches:
- Abschreckung von Betrug durch die Implementierung einer hash-check auf den Ausgang des YAML-Datei
- Hilfe beim Debuggen, indem er alle Einheiten stammen die Informationen aus einer einzigen autoritativen Quelle.
Diese EntityResource
Objekte werden dann eingespeist in eine EntityFactory
Objekt zu produzieren Einheiten eines bestimmten Typs.
Meine Frage ist wie folgt. Gibt es eine Möglichkeit zu schaffen, sublcasses von EntityResource
dynamisch, auf der Grundlage der Inhalte der YAML-Datei eingelesen?
Außerdem möchte ich jedes dieser YAML-Datei abgeleiteten Unterklassen zugeordnet werden, die eine singleton-Metaklasse. Irgendwelche Vorbehalte?
- haben Sie überprüft diese Frage stackoverflow.com/questions/3915024/... ?
- was meinst du mit singleton-Metaklasse ?
- Ich Tat es nicht. Jetzt Lesen...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, ob dies ist, was Sie suchen, aber Sie können
type
zum erstellen von Unterklassen dynamisch:Edit: um Zu verstehen, wie
type
funktioniert, Sie brauchen nur zu übersetzen, wie würden Sie schreiben die Klassen-und übersetzen, dass in eintype
nennen. Zum Beispiel, wenn Sie wollen, etwas zu schreiben wie:dann, das wäre übersetzt:
wo:
TypeError: a new-style class can't have only classic bases
. Hinzufügenobject
auf die Eltern-Klasse Tupel scheint das problem zu beheben. Scheint dies, wie die richtige Lösung?SubClass
später im Programm, aber nochEntityResource.__subclasess__()
hält dieser EintragIst es möglich, erstellen von Unterklassen on-the-fly. Dies bedeutet nicht, dass Sie sollten. In jedem Fall werde ich einen Mechanismus bereitstellen.
Den Grundlagen Attribut in jeder Klasse erzählt Sie die Vererbungskette:
So,
__bases__
ist ein Tupel mit den "Grundlagen der Vererbung". Sie können ersetzen Sie das Tupel (Sie können nicht "angefügt" oder "pop", weil es ist ein Tupel, und Tupel sind unveränderlich). Zum Beispiel, sagen, dass Sie ein "mixin-Klasse", die fügt Funktionalität, um einige Tier-Unterklassen, in anderen aber nicht:Erzeugt die folgende Ausgabe:
Viele Menschen betrachten MixIn-Klassen bösen. Und Sie mögen Recht haben! Sie können sich vorstellen, dass, wenn Sie mess up die Grundlagen Attribut, Sie ziemlich viel zerstört Ihr Programm. So, da ist Sie - Sie kann sich dynamisch ändern Sie die Vererbung ein Objekt, aber es bedeutet nicht, sollten Sie (wahrscheinlich abstrakte Klassen oder Konzept, Umsetzung?)
Wenn ich höre, "erstellen von Unterklassen on-the-fly" ich verstehe "Objekte erstellen, die sich anders Verhalten, on-the-fly", das ist wirklich eine Frage der Konfiguration.
Gibt es alles, was Sie brauchen, dass Sie nicht bekommen kann nur durch das Lesen einiger Daten und erstellen ein Objekt, das entscheidet, wie es geht, zu Verhalten, basiert auf dem, was er liest?
Hier ist die Metapher: ich bin ein handliches Kerl-ich zusammenstellen kann, jeder IKEA-Artikel, den Sie nach mir werfen. Aber ich bin nicht einer anderen person jedes mal, ich bin genauso praktisch, Kerl Lesen einen anderen Satz von Diagrammen und auf der Suche nach verschiedenen Arten von Schrauben und Holzstücke. Das ist meine Argumentation für das erstellen von Unterklassen ist nicht das natürlichen Lösung hier.
EntityResource
für jeden Einheitentyp.