Ich arbeite an einem kleinen persönlichen Projekt, wo ich viele Klassen erstellt habe. Jede Klasse hat ein eigenes Register, das alle seine Instanzen:Methoden für mehrere Klassen definieren
class IterReg(type):
# Register of all objects for iteration
def __iter__(cls):
return iter(cls._reg.values())
Die „Vorlage“, die ich für jede Klasse verwenden ist
class Point(object):
# Point object
__metaclass__ = IterReg
_reg = dict()
counter = 0
# Initialize
def __init__(self, name):
self.name = name
self._reg[self.name] = self
Point.counter += 1
# Return register keys
@staticmethod
def get_reg_keys(cls):
return cls._reg.keys()
und einige andere (nicht wichtig für ein MWE) Sachen. Wenn ich initialisieren, zB a = Point("Point A")
, kann ich dann rufen:
>>> a.get_reg_keys()
['Point A']
, die (natürlich) das gleiche Ergebnis, dass ich von
bekommenPoint.get_reg_keys()
Nun meine Frage: Gibt es eine Möglichkeit zu definieren, diese Methode einmal für alle Klassen (also irgendwie in der metaclass
). dachte ich zuerst so etwas gearbeitet hatte:
class IterReg(type):
# Register of all objects for iteration
def __iter__(cls):
return iter(cls._reg.values())
def get_reg_keys(cls):
return cls._reg.keys()
Aber dann kann ich einfach anrufen get_reg_keys()
aus der Klasse (d Point.get_reg_keys()
) und nicht von irgendeiner Instanz davon.
Warum nicht einfach eine Basisklasse erstellen (zB 'RegisteredBase'), die Ihre' get_reg_keys' Methode und die generische '__init__' Methode hat? Dann unterwerfe deine Klasse "Point" einfach davon. – Kendas
'Point.get_reg_keys()' ist die korrekte Methode, diese statische Funktion jedoch aufzurufen –