Wie __getattr__
mit Python 3 und Vererbung überschrieben werden?'Super' Objekt hat kein Attribut '__getattr__' in python3
Wenn ich folgendes:
class MixinA:
def __getattr__(self, item):
# Process item and return value if known
if item == 'a':
return 'MixinA'
# If it is unknown, pass it along to give
# a chance to another class to handle it
return super().__getattr__(item)
class MixinB:
def __getattr__(self, item):
# Process item and return value if known
if item == 'b':
return 'MixinB'
# If it is unknown, pass it along to give
# a chance to another class to handle it
return super().__getattr__(item)
class Example(MixinA, MixinB):
# main class
pass
ich diesen Fehler.
>>> e = Example()
>>> e.a
'MixinA'
>>> e.b
'MixinB'
>>> e.c
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
...
AttributeError: 'super' object has no attribute '__getattr__'
Konnte ich nicht nur den Attributfehler erhalten, der auf die ursprüngliche Klasse und Eigenschaft verweist? Das heißt:
AttributeError: 'Example' object has no attribute 'c'
PS: Ich fand diesen Beitrag 'super' object not calling __getattr__ aber ich bin nicht sicher, zu verstehen, ob es eine Lösung gibt.
Dies ist das Aushängeschild für die Verwendung von 'Eigenschaften'. – dursk
@mattm Was meinst du? Könnten Sie expliziter sein? Ich möchte keine Eigenschaften verwenden. Lassen Sie mich versuchen, mehr zu erklären, was ich zu erreichen versuche. Ich erstelle mehrere Mixins, um dynamisch zusätzliche Optionen für einige Attribute basierend auf ihrem Namen hinzuzufügen. Zum Beispiel, wenn ein Attr endet mit '_logs', dann können Sie einen Auszug erhalten, indem Sie' __excerpt' => zB hinzufügen: Wenn ein Obj ein 'xxx_logs' Attribut hat, würde' obj.xxx_logs__excerpt' abgefangen und würde funktionieren. – Michael