11 Stimmen

Ist diese Verwendung von isinstance pythonisch/"gut"?

Eine Nebenwirkung von ce Frage ist, dass ich dazu verleitet wurde ce poste in der es heißt:

Wann immer isinstance verwendet wird, gabelt sich der Kontrollfluss; ein Objekttyp geht den einen Codepfad hinunter, und andere Objekttypen gehen den anderen hinunter --- selbst wenn sie die gleiche Schnittstelle implementieren!

und suggeriert, dass dies eine schlechte Sache ist.

Allerdings habe ich Code wie diesen schon einmal verwendet, und zwar auf eine Art und Weise, die ich für OO hielt. Etwas wie das folgende:

class MyTime(object):
    def __init__(self, h=0, m=0, s=0):
        self.h = 0
        self.m = 0
        self.s = 0
    def __iadd__(self, other):
        if isinstance(other, MyTime):
            self.h += other.h
            self.m += other.m
            self.s += other.s
        elif isinstance(other, int):
            self.h += other/3600
            other %= 3600
            self.m += other/60
            other %= 60
            self.s += other
        else:
            raise TypeError('Addition not supported for ' + type(other).__name__)

Daher meine Frage:

Ist diese Verwendung von isinstance "pythonische" und "gute" OOP?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X