/ / Wie testen, ob eine Klasse explizit ein __gt__ definiert hat? - Python, Python-3.x

Wie testen, ob eine Klasse explizit ein __gt__ definiert hat? - Python, Python-3.x

Gibt es eine Möglichkeit zu testen, ob eine Kostümklasse ein Attribut explizit definiert hat? __gt__? Um die Dinge im Zusammenhang zu sehen, betrachten Sie diese zwei Klassen:

class myclass1:
def __init__(self, val):
self.val = val

def __gt__(self, other):
if type(other) is int:
return self.val > other
else:
return self.val > other.val


class myclass2:
def __init__(self, val):
self.val = val

Da ich ein Ungleichheitsattribut nur für myclass1 und nicht für myclass2 Berufung

x1 = myclass1(5); x2 = myclass2(2)
x1 > x2
x2 < x1

wird benutzen myclass1.__gt__ in beiden Fällen. Hatte ich definiert myclass2.__lt__Die letzte Zeile hätte es aufgerufen. Aber ich tat es nicht x1"s __gt__ Ergreift beide Aufrufe. Ich denke, ich verstehe das (aber Kommentare sind willkommen).

Also meine Frage: Gibt es eine Möglichkeit zu wissen, welche Ungleichungen explizit für eine benutzerdefinierte Klasse definiert wurden? weil

hasattr(x2, "__gt__")

kehrt zurück True sowieso.

Antworten:

2 für die Antwort № 1

Sie können innerhalb der überprüfen __dict__ für jede Klasse:

"__gt__" in x2.__class__.__dict__
Out[23]: False

"__gt__" in x1.__class__.__dict__
Out[24]: True

Oder, indem man eingebaute verwendet, um sich nicht auf die Donners zu verlassen:

"__gt__" in vars(type(x1))
Out[31]: True

"__gt__" in vars(type(x2))
Out[32]: False