Wie kann eine Instanz in eine abgeleitete Klasse umgewandelt werden?

Ich versuche, eine kleine Vererbung in einem Python-Programm zu verwenden, an dem ich arbeite. Ich habe eine Basisklasse, User, die alle Funktionen eines Benutzers implementiert. Ich füge das Konzept eines nicht genehmigten Benutzers hinzu, der genau wie ein Benutzer ist, und füge eine einzelne Methode hinzu.

Die User-Klasse verfügt über einige Methoden, die ein User-Objekt zurückgeben. Dies funktioniert nicht, wenn ich eine Unterklasse bilde, da der Benutzer "UnapprovedUser" zurückgegeben wird, wodurch ich unter anderem daran gehindert werde, diese Methode aufzurufen.

class User(object):
    base_dn = 'ou=Users,dc=example,dc=org'

    @classmethod
    def get(cls, uid):
        ldap_data = LdapUtil.get(uid + ',' + self.base_dn)
        return User._from_ldap(ldap_data)

class UnapprovedUser(User):
    base_dn = 'ou=UnapprovedUsers,dc=example,dc=org'

    def approve(self):
        new_dn = '' # the new DN
        LdapUtil.move(self.dn, new_dn)

Dasget() und_from_ldap() Die Methoden sind für beide Klassen gleichget() Methode in UnapprovedUser muss ein UnapprovedUser-Objekt zurückgeben, kein Benutzer.

Wie kann ich eine der Instanzen von User besetzen, die ich von bekomme?User.get() in einen nicht genehmigten Benutzer?

Ich möchte etwas machen wie:

class UnapprovedUser(User):
    # continued from before

    @classmethod
    def get(cls, uid):
        user = super(UnapprovedUser, cls).get(uid)
        return (UnapprovedUser) user # invalid syntax

Damit kann ich die Methode vom übergeordneten Element umbrechen und den zurückgegebenen Wert einfach in die richtige Klasse umwandeln. Andererseits könnte dies dazu führen, dass die Eltern ihren Wert für verwendenself.base_dn, was alles kaputt machen würde.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage