TypeError: 'type' - Objekt ist nicht durchsuchbar - Iteration über Objekt-Instanzen

Ich bin an einem Projekt arbeiten, und ich möchte, dass einer meiner Klassen durchsuchbar. Zu den besten meines Wissens, ich kann das mit metaclass.

Zunächst möchte ich verstehen, wie Metaklasse funktioniert. Daher möchte ich meine eigene üben Beispiel, wo ich aus einem Auto-Klasse. So, hier möchte ich gerne mein Auto die Objekte der Klasse iterierbar, dann würde ich gerne drucken die Namen von Ihnen in der main-Funktion.

Code-Beispiel ist das folgende:

__author__ = 'mirind4'

class IterableCar(type):
    def __iter__(self):
        return iter(self.__name__)

class Car(object):
    __metaclass__ = IterableCar

    def __init__(self, name):
        self.name = name


if __name__=='__main__':

    car1 = Car('Mercedes')
    car2 = Car('Toyota')
    for cars in Car:
        print (cars.name)

Aber leider bekam ich eine TypeError:

TypeError: 'type' object is not iterable

Würden Sie so freundlich sein, mir zu sagen, wo ich den Fehler in meinem code? So weit ich habe ähnliches problem-Fragen über diese Website und das internet, aber ich weiß nicht, was das problem ist. Ich bin mit python 3.4.
Vielen Dank im Voraus!

Sie haben for cars in Car. Auto ist eine Klasse definition. Was erwarten Sie, das zu tun? Meinten Sie setzen car1 und car2 in eine Liste und Durchlaufen? (Ich sehe, Sie haben etwas an der Spitze, zu deiner Frage "macht eine Klasse iterierbar" aber es ist nicht klar, was Sie wollen. Car scheint nicht zu vertreten jede Art von Sammlung.)
Ich denke, dass OP es will Ausbeute C - A - R ... Interessantes Konzept, macht eine iterierbar Klasse...
Ich würde eigentlich vermuten, dass der OP möchte es zurückgeben von jeder Instanz, so weit erstellt, was ich bezweifle, ist möglich, aber wir werden sehen.
In Python 3 definieren Sie eine Metaklasse, mit class Car(metaclass=IterableCar), nicht mit der __metaclass__ Attribut.
Vorausgesetzt, der Metaklasse ist die Bereitstellung der definition von __new__ glaube ich so.

InformationsquelleAutor mirind4 | 2015-09-02

Schreibe einen Kommentar