Как вы приведете экземпляр к производному классу?
Я пытаюсь использовать небольшое наследование в программе Python, над которой я работаю. У меня есть базовый класс User, который реализует все функциональные возможности пользователя. Я добавляю концепцию неутвержденного пользователя, которая похожа на пользователя, с добавлением единственного метода.
У класса User есть несколько методов, которые возвращают объект User. Это не будет работать, когда я создаю подкласс, так как в конечном итоге UnapprovedUser вернет User, что, помимо прочего, не позволит мне вызывать этот метод.
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)
get()
а также_from_ldap()
методы одинаковы для обоих классов, хотяget()
метод в UnapprovedUser должен возвращать объект UnapprovedUser, а не пользователя.
Как я могу разыграть один из экземпляров пользователя, от которого я получаюUser.get()
в UnapprovedUser?
Я хочу сделать что-то вроде:
class UnapprovedUser(User):
# continued from before
@classmethod
def get(cls, uid):
user = super(UnapprovedUser, cls).get(uid)
return (UnapprovedUser) user # invalid syntax
так что я могу обернуть метод от родителя и просто привести возвращенное значение к правильному классу. Опять же, выполнение этого может привести к тому, что родитель использует их значение дляself.base_dn
, который сломал бы все.