Überschreiben Sie die Eigenschaft von Wrapper ClassPython

Python-Programme
Anonymous
 Überschreiben Sie die Eigenschaft von Wrapper Class

Post by Anonymous »

Ich habe eine Klasse A mit einer Eigenschafts -Requisite und einer Methode, die diese Eigenschaft verwendet: < /p>

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 __ 
in B festzulegen, aber es scheint nicht einmal aufzulösen, dass Requent in a
[/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

Ich möchte, dass b.other_prop 8
eine Möglichkeit zurückgibt, dies zu erreichen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post