¿Cómo se lanza una instancia a una clase derivada?

Estoy tratando de usar un poco de herencia en un programa de Python en el que estoy trabajando. Tengo una clase base, Usuario, que implementa toda la funcionalidad de un usuario. Estoy agregando el concepto de un usuario no aprobado, que es como un usuario, con la adición de un solo método.

La clase Usuario tiene algunos métodos que devuelven un objeto Usuario. Esto no funcionará cuando realice una subclase, ya que terminaré teniendo un Usuario no aprobado que devuelva un Usuario, lo que me impedirá llamar a este método, entre otras cosas.

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)

losget() y_from_ldap() Los métodos son los mismos para ambas clases, aunque elget() El método en UnapprovedUser necesita devolver un objeto UnapprovedUser, no un usuario.

¿Cómo puedo lanzar una de las instancias de Usuario que recibo deUser.get() en un usuario no aprobado?

Quiero hacer algo como:

class UnapprovedUser(User):
    # continued from before

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

de modo que pueda ajustar el método del padre y simplemente convertir el valor devuelto a la clase correcta. Por otra parte, hacerlo de esta manera podría hacer que el padre use su valor paraself.base_dn, que lo rompería todo.

Respuestas a la pregunta(4)

Su respuesta a la pregunta