Überschreiben Sie die Eigenschaft von Wrapper Class
Posted: 14 Feb 2025, 04:24
Ich habe eine Klasse A mit einer Eigenschafts -Requisite und einer Methode, die diese Eigenschaft verwendet: < /p>
in B festzulegen, aber es scheint nicht einmal aufgeladen zu werden, wenn sie die Prop in a
Code: Select all
class A:
@property
def prop(self) -> int:
return 1
def method(self) -> int:
return self.prop * 2 # Uses self.prop
< /code>
Dann habe ich eine Wrapper -Klasse, die versucht, diese Eigenschaft wie folgt zu überschreiben: < /p>
class B:
def __init__(self, a: A):
self._a = a
@property
def prop(self) -> int:
return 2 # Override A's property
def __getattr__(self, attr):
if attr in self.__dict__:
return getattr(self, attr)
return getattr(self._a, attr) # Delegate attribute access to A if attr not in B
< /code>
Wenn B.Method () aufgerufen wird, möchte ich, dass die Berechnung mit Bs Requisite durchgeführt wird und 4 als Ergebnis erhalten. Was stattdessen passiert, ist, dass die Prop innerhalb von a auflöst, und b.Method () gibt 2. < /P>
zurückb = B(a)
b.method() # Returns 2. Wanted 4
< /code>
Gibt es eine Möglichkeit, die Eigenschafts -Requisite in a zu überschreiben, wenn sie in A's Code verwendet wird, wenn sie von b? < /p>
< Br /> [*] Ich kann die Vererbung für diese Klassen nicht verwenden < /li>
Ich möchte vermeiden, dass die Methode () Logik in B < /li>
Ich habe auch versucht, __GetAttribute __