如何将实例转换为派生类?

2024-03-12

我正在尝试在我正在开发的 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,这会破坏一切。


我认为你真正想要的不是“铸造”,而是创造一个UnapprovedUser而不是一个User当调用UnapprovedUser.get()。要做到这一点:

Change User.get实际使用cls传入的参数:

@classmethod
def get(cls, uid):
    ldap_data = LdapUtil.get(uid + ',' + self.base_dn)
    return cls._from_ldap(ldap_data)

你需要做类似的事情_from_ldap。您没有列出代码_from_ldap,但我认为在某些时候它会做类似的事情:

result = User(... blah ...)

您想将其替换为:

result = cls(... blah ...)

请记住:在 Python 中,类对象是构造该类实例的可调用对象。所以你可以使用cls类方法的参数,用于构造用于调用类方法的类的实例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将实例转换为派生类? 的相关文章

随机推荐

  • 如何获取旋转的线性渐变 svg 用作背景图像?

    我看到了一些围绕这个问题的问题 所以我希望这不是太多余 理想情况下 我想要一个image svg xml它可以扩展到容器的 100 彩色西拉 http www colorzilla gradient editor让我有一个良好的开端data
  • Visual Studio 2010 intellisense for KnockoutJS inside RequireJS

    我想在 Visual Studio 2010 中获得智能感知 用于淘汰 JS 经过一番研究后我得到的是 reference path lib knockout knockout 2 3 0 debug js gt ko WeGotIntel
  • Rails 4 和 Ruby 2 Net/HTTP SSL 请求:OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: 未知协议

    这几乎是以下内容的重复 SSL connect 返回 1 errno 0 状态 SSLv3 读取服务器证书 B 证书验证失败 https stackoverflow com questions 4528101 ssl connect ret
  • 水晶报表中从右到左的字符串

    考虑 SQL Server 中的以下查询 下图是水晶报表中查询的结果 正如你所看到的 右侧部分与sql server中的查询结果完全相同 左侧部分通过锁定函数进行转换 以满足波斯语从右到左的属性 我需要获得这个功能 首先 你需要重写你的sq
  • X11 非剪裁子窗口

    X 有非裁剪子窗口的概念吗 中的行为 Windows 和 OSX 的这些是 父母总是站在孩子后面 当父项关闭时 子项也会自动关闭 孩子们在移动时跟随父母 如果答案是否定的 那么我可以模拟 2 和 3 但是 1 怎么样 Thanks Cosm
  • 猫鼬有 isDirty 检查吗?

    我有一个涉及嵌入式模式的猫鼬设置 可以说 带有嵌入式评论的博客文章 评论可以由原始发布者以及编辑 管理员编辑 添加 编辑评论后 整个博客文章将被保存 我在嵌入式评论模式上设置了一些自定义猫鼬的 预 中间件 它会自动设置该特定评论的laste
  • 驱动程序可执行文件必须由 webdriver.ie.driver 系统属性设置

    我正在使用 Selenium 来自动化测试 我的应用程序仅使用 IE 它无法在其他浏览器上运行 Code import org openqa selenium ie InternetExplorerDriver import org ope
  • Firebase onAuthStateChanged 始终返回未定义

    我一直在尝试创建一个 util 方法 该方法将返回用户对象或用户对象是否存在 如果没有参数 它应该返回一个布尔值 如果有参数 getUser 它应该返回用户对象 但它总是返回未定义的 这似乎工作了一段时间 但后来我休息了一下 回来时它总是返
  • 在 NodeJS 中安排异步函数

    我想安排一个异步函数 异步 等待返回类型 每两分钟运行一次 我尝试使用通用setInterval 节点模块如节点计划 cron 节点计划 异步轮询但无法实现异步函数调用的轮询 这是我在代码中尝试过的 cron schedule 2 awai
  • 使用 create-react-app 时出现“未捕获的引用错误:jQuery 未定义”

    正在使用构建 React 应用程序创建反应应用程序 https github com facebookincubator create react app所以该应用程序已准备好服务器 当导入引导 javascript 插件 例如 affix
  • Android 中的日期验证

    我是 Android 编程新手 目前正在开发一个应用程序 有人可以帮助我如何验证用户输入的日期是否有效 private Pattern pattern private Matcher matcher private static final
  • 如何在 PHP 中下载现有文件

    我的服务器上有一个 pdf 文件 我想创建这样的链接 用户可以单击它并下载该 pdf 文件 我正在使用 Zend 框架与 Php 一起工作 将此代码放入 php 文件中并将其命名为 f e 下载 php
  • 当执行计划中存在“PARTITION LIST SUBQUERY”时,某些内容(错误?)会取消实例化包

    这是 Oracle 12c 的错误吗 我在 Oracle Linux 上运行 64 位 Oracle 12 1 0 2 遇到一件奇怪的事情 当执行计划切换到使用 PARTITION LIST SUBQUERY 时 受影响的查询中使用的包将丢
  • iCal 属性参数可以/应该转义吗?

    具体来说 CN 通用名称 参数 例如 ORGANIZER CN John Doe Eng mailto 电子邮件受保护 cdn cgi l email protection 恕我直言 RFC 对此含糊其辞 这是非常清楚的属性值 of typ
  • 如何将 numpy.matrix 或数组转换为 scipy 稀疏矩阵

    对于 SciPy 稀疏矩阵 可以使用todense or toarray 转换为 NumPy 矩阵或数组 进行逆运算的函数有哪些 我进行了搜索 但不知道哪些关键字应该是正确的 初始化稀疏矩阵时 您可以传递 numpy 数组或矩阵作为参数 例
  • 如何将 Jsoup 与 Volley 一起使用?

    我有一个使用 Jsoup 和 AsyncTask 的工作示例 效果很好 我只是对表现不满意 加载包含文本和图像的简单列表页面需要 3 6 秒 我想以某种方式提高性能 所以我偶然发现了截击 谁能解释一下如何在 jsoup 中使用 volley
  • 是否应该在 Windows 7 计算机上安装用于 powershell 的活动目录模块来导入它,还是可以从 Windows 2008 R2 DC 远程导入它?

    目前我正在开发任务板 用于将一些权限委托给远程管理员 我有以下问题 gt 对于在 powershell 中导入 Active Directory 模块 它是本地安装还是可以从 Windows 2008 R2 DC 远程导入 gt 对于在远程
  • 如何删除所有排队的作业,因为它会导致错误?

    我的网站将电子邮件发送作业排队到jobs桌子 我认为电子邮件服务器有问题 无法发送电子邮件 因此作业被困在作业表中 现在可能有太多作业 我收到此错误消息 Next exception Illuminate Database QueryExc
  • 这是什么字符编码?

    我正在与 Oracle DB 进行交互 该数据库的编码有些混乱 根据数据库属性为 ASCII7 但实际上对韩语字符进行编码 当我从结果集中获取一些韩语字符串并查看字节时 结果发现它们与该文件完全对应 我通过谷歌搜索一些字节序列发现 http
  • 如何将实例转换为派生类?

    我正在尝试在我正在开发的 Python 程序中使用一些继承 我有一个基类 User 它实现了用户的所有功能 我添加了未经批准的用户的概念 它就像用户一样 只是添加了一个方法 User 类有一些返回 User 对象的方法 当我子类化时 这将不