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):
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>
[list] < 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 __
[/list]
Bearbeiten
/strong>:
Ich möchte auch, dass die Eigenschaft auch für andere Eigenschaften überschrieben wird. Also, wenn ich andere_prop in a habe wie folgt:
Code: Select all
class A:
@property
def prop(self) -> int:
return 1
@property
def other_prop(self) -> int:
return self.prop * 4 # Uses self.prop
def method(self) -> int:
return self.prop * 2 # Uses self.prop
eine Möglichkeit zurückgibt, dies zu erreichen?