Ich habe eine Klasse unten angegeben. Es implementiert __iter__
und __next__
. Es ist ein iterabler und ein eigener Iterator.Überprüfen, ob eine Klasse iterierbar ist
class fib(object):
def __init__(self):
self.prev = 0
self.curr = 1
def __iter__(self):
return self
def __next__(self):
value = self.curr
self.curr += self.prev
self.prev = value
return value
from collections import Iterable
print(isinstance(fib, Iterable))
Der Druck Anweisung gibt False
, würde ich erwarten, dass es True
'fib' ist die * Klasse *, keine Instanz. Sie würden also den Unterklassencheck 'issubclass (fib, Iterable)' verwenden. Oder du erschaffst zuerst eine Instanz: 'isinstance (fib(), Iterable)' - Das bekommst du, wenn du deinen Klassennamen mit einem Kleinbuchstaben beginnst;) – poke
'fib' ist nicht iterierbar. 'fib' ist eine Klasse, deren Instanzen iterierbar sind. Der Versuch, über "fib" selbst zu iterieren, wäre wie der Versuch, das Konzept von Burgern zu essen. – user2357112