Я пытаюсь использовать небольшое наследование в программе 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.
Как я могу привести один из экземпляров User, полученных из 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
, что сломает все.