Wie kann man Python mit welchem ​​Konstruktor mit sagen, dass sie Unterklassen instanziieren soll? [Duplikat]Python

Python-Programme
Guest
 Wie kann man Python mit welchem ​​Konstruktor mit sagen, dass sie Unterklassen instanziieren soll? [Duplikat]

Post by Guest »

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>

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)
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 />

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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post