Jak rzucić instancję na klasę pochodną?

Próbuję użyć małego dziedziczenia w programie Pythona, nad którym pracuję. Mam klasę bazową User, która implementuje wszystkie funkcje użytkownika. Dodaję koncepcję niezatwierdzonego użytkownika, który jest podobny do użytkownika, dodając jedną metodę.

Klasa User ma kilka metod, które zwracają obiekt User. To nie zadziała, gdy podklasuję, ponieważ w końcu otrzymam użytkownika UnapprovedUser, uniemożliwiając mi między innymi wywołanie tej metody.

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)

Theget() i_from_ldap() metody są takie same dla obu klas, chociażget() metoda w UnapprovedUser musi zwrócić obiekt UnapprovedUser, a nie użytkownika.

Jak mogę oddać jedną z instancji użytkownika, z której otrzymałemUser.get() do niezatwierdzonego użytkownika?

Chcę zrobić coś takiego:

class UnapprovedUser(User):
    # continued from before

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

tak, że mogę zawinąć metodę od rodzica i po prostu oddać zwróconą wartość do poprawnej klasy. Z drugiej strony, zrobienie tego w ten sposób może doprowadzić do tego, że rodzic użyje ich wartościself.base_dn, co złamałoby wszystko.

questionAnswers(4)

yourAnswerToTheQuestion