Ich habe die folgende Klasse erstellt, die zum Verwalten aller erstellten Instanzen hergestellt wurde, und um schnelle Suche und Abrufen bestimmter Werte durch die angegebenen Suchschlüssel zu ermöglichen: < /p>
class InstanceManager[InstanceT, LookupT: Hashable]():
def __init__(
self,
get_lookups: Callable[[InstanceT], Iterable[LookupT]],
on_add: Opt[Callable[[InstanceT], None]] = None,
on_remove: Opt[Callable[[InstanceT], None]] = None
) -> None:
self._on_add = on_add
self._on_remove = on_remove
self._get_lookups = get_lookups
self._all: list[InstanceT] = []
self._lookup: dict[LookupT, InstanceT] = {}
self._LOCK = threading.RLock()
def lookup(self, lookup: LookupT) -> InstanceT:
return self._lookup[lookup] # atomic operation
def all_instances(self) -> list[InstanceT]:
with self._LOCK:
return list(self._all)
def get_lookups(self, instance: InstanceT) -> tuple[LookupT, ...]:
with self._LOCK:
return tuple(k for k, v in self._lookup.items() if v == instance)
def add(self, instance: InstanceT) -> None:
with self._LOCK:
lookup_values = self._get_lookups(instance)
if instance in self._all:
raise ValueError("Instance already in added")
self._all.append(instance)
for lv in lookup_values:
if lv in self._lookup:
raise ValueError("lookup value already used for different instance")
self._lookup[lv] = instance
if self._on_add is not None:
self._on_add
def remove(self, instance: InstanceT):
with self._LOCK:
for k, v in self._lookup.items():
if v == instance:
self._lookup.pop(k)
self._all.remove(instance)
if self._on_remove is not None:
self._on_remove()
< /code>
Jetzt frage ich mich, ob eine Klasse, die diese Funktionalität nutzt, mehr davon profitieren würde, von ihm zu erben oder ein Klassenfeld zum Instanzmanager zu machen. Ich weiß, dass die Erbschaft eine "ist eine" Beziehung ist, während Komposition eine "hat" -Be -Beziehung ist, aber ich habe das Gefühl, dass in diesem Fall mir nicht wirklich hilft, die Frage zu beantworten.>
Python -Erbschaft gegen Komposition für Instancemanager ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post
-
-
C#> ts mit Erbschaft und Generika und Typen auflösen zur Laufzeit [geschlossen]
by Anonymous » » in C# - 0 Replies
- 5 Views
-
Last post by Anonymous
-