Python -Erbschaft gegen Komposition für InstancemanagerPython

Python-Programme
Anonymous
 Python -Erbschaft gegen Komposition für Instancemanager

Post by Anonymous »

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.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post