def add_info_extractor(self, ie):
"""Add an InfoExtractor object to the end of the list."""
self._ies.append(ie)
if not isinstance(ie, type):
self._ies_instances[ie.ie_key()] = ie
ie.set_downloader(self)
def get_info_extractor(self, ie_key):
"""
Get an instance of an IE with name ie_key, it will try to get one from
the _ies list, if there's no instance it will create a new one and add
it to the extractor list.
"""
ie = self._ies_instances.get(ie_key)
if ie is None:
ie = get_info_extractor(ie_key)()
self.add_info_extractor(ie)
return ie
Das Folgende stammt aus einem populären Python Repo, dem Youtube-dl. In dem Bestreben, ein besserer Programmierer zu werden, gehe ich quer durch diesen Abschnitt und habe Schwierigkeiten, es zu verstehen.Wie funktioniert dieser bestimmte Codeabschnitt?
Insbesondere die letzte Methode und wie es keine unendliche Rekursion eingeben, wenn der ie_key nicht in der Liste gefunden wird.
Sowie der isinstance Vergleich in der ersten Methode.
Ich verstehe die normale Implementierung ist etwas für die Wirkung von: isinstance ('Hallo', str), aber wie kann Typ() ein Typ sein? Außerdem: Was ist der Sinn, ein Objekt mit einem Typ zu vergleichen?
Ich würde vermuten, dass _ies_instances ein dict ist, und hat irgendwann etwas wie 'self._ies_intances [None] = var' – JETM
Es gibt endlose Rekursion ... – Bharel