我正在尝试在我正在开发的 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)
The get()
and _from_ldap()
这两个类的方法是相同的,尽管get()
UnapprovedUser 中的方法需要返回 UnapprovedUser 对象,而不是 User。
我如何投射我从中获得的 User 实例之一User.get()
进入未经批准的用户?
我想做类似的事情:
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
,这会破坏一切。