Wie kann man Python mit welchem Konstruktor mit sagen, dass sie Unterklassen instanziieren soll? [Duplikat]
Posted: 31 Jan 2025, 12:22
Ich bin in der folgenden Situation: Ich habe einen Typ A , zwei Subtypen b und c eines , eine Funktion f vom Typ A vom Typ a -> A Das ist so, dass
[*] für ein beliebiges B Objekt x , f (x) ist vom Typ b ;
Für jeden C Objekt x , f (x) vom Typ c . < /li>
< /ul>
Ich möchte, dass eine Python -Code mit diesen Daten entspricht. Ich habe Folgendes ausprobiert: < /p>
Und natürlich stellt der Assert eine Ausnahme an, und ich verstehe jetzt, dass ich sie vorhersagen sollen (das einzige F , das definiert wird, erstellt ein Objekt von von Geben Sie A ...) ein. , das wäre genau das gleiche, außer dem Konstruktoraufruf in der letzten Zeile der Methode. Es scheint nicht sehr klug zu tun. Gibt es eine intelligentere Art und Weise? Br />
von.
Es scheint zu funktionieren; Ist es die bevorzugte Art, das Problem zu lösen?
[*] für ein beliebiges B Objekt x , f (x) ist vom Typ b ;
Für jeden C Objekt x , f (x) vom Typ c . < /li>
< /ul>
Ich möchte, dass eine Python -Code mit diesen Daten entspricht. Ich habe Folgendes ausprobiert: < /p>
Code: Select all
class A:
def __init__(self, args):
...
def f(self) -> A:
args = ... # things needing self
return A(args)
class B(A):
pass
class C(A):
pass
< /code>
und getestet < /p>
x = B(...)
y = x.f()
assert isinstance(y, B)
Code: Select all
return A(args)
von
Code: Select all
return type(self)(args)
Es scheint zu funktionieren; Ist es die bevorzugte Art, das Problem zu lösen?