在 __init__ 中使用继承的类方法

2023-12-04

我有一个由几个孩子继承的父类。我想使用父母的初始化其中一个孩子@classmethod初始化器。我怎样才能做到这一点?我试过:

class Point(object):
    def __init__(self,x,y):
        self.x = x
        self.y = y

    @classmethod
    def from_mag_angle(cls,mag,angle):
        x = mag*cos(angle)
        y = mag*sin(angle)
        return cls(x=x,y=y)


class PointOnUnitCircle(Point):
    def __init__(self,angle):
        Point.from_mag_angle(mag=1,angle=angle)


p1 = Point(1,2)
p2 = Point.from_mag_angle(2,pi/2)
p3 = PointOnUnitCircle(pi/4)
p3.x #fail

如果你尝试写__init__像这样,你的PointOnUnitCircle有不同的接口Point(因为它需要angle而不是x, y)因此不应该真正成为它的子类。怎么样:

class PointOnUnitCircle(Point):

    def __init__(self, x, y):
        if not self._on_unit_circle(x, y):
            raise ValueError('({}, {}) not on unit circle'.format(x, y))
        super(PointOnUnitCircle, self).__init__(x, y)

    @staticmethod
    def _on_unit_circle(x, y):
        """Whether the point x, y lies on the unit circle."""
        raise NotImplementedError

    @classmethod
    def from_angle(cls, angle):
        return cls.from_mag_angle(1, angle)

    @classmethod
    def from_mag_angle(cls, mag, angle):  
        # note that switching these parameters would allow a default mag=1
        if mag != 1:
            raise ValueError('magnitude must be 1 for unit circle')
        return super(PointOnUnitCircle, cls).from_mag_angle(1, angle)

这使接口保持不变,添加了用于检查子类输入的逻辑(一旦您编写了它!)并提供了一个新的类方法来轻松构造新的PointOnUnitCircle从一个angle。而不是

p3 = PointOnUnitCircle(pi/4)

你必须写

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

在 __init__ 中使用继承的类方法 的相关文章

随机推荐

  • Python和sqlite3:删除多行[重复]

    这个问题在这里已经有答案了 我需要使用 SQL 语句从 sqlite3 表中删除多行 例如 DELETE FROM table WHERE id IN 23 19 35 16 12 78 我的问题是用 Python 进行编码 并将 ids
  • 赋予 元素自动对焦

    使用以下代码 我尝试在加载页面时给予 a 元素自动聚焦 a href setting class button big active Next vocabulary a 虽然这适用于输入字段 但不适用于该元素 有人能给我解释一下吗 Rega
  • 使用 jquery 悬停地图区域精灵

    我正在开发我的第一个实际的 WordPress 网站 但我在使用 jquery 时遇到了一些问题 我真的希望有人能在这里帮助我 所以我想做的是根据当前悬停的地图区域来定位我的 div 背景 我在这里找到了一个例子 http ubytujna
  • Dal(带有实体框架)和模型层进入 MVC

    首先 我使用EF进入Dal层 与 MVC 分离的项目 相同的解决方案 从 EF 的 EDMX 文件生成的模型是来自的实际模型Model层 如果是这样 我如何访问这些模型以在 MVC 中工作View层 我认为直接从视图访问数据层来使用这些模型
  • 从现有数据库生成 JPA 2 实体

    如何从现有数据库生成符合 JPA2 标准的 Entity 我找到了这个 Question 仍然不清楚 JBoss 是否会生成兼容的 JPA2 而且我也想知道是否有一种独立于供应商的方法来做到这一点 您可以使用类似的插件日食大理为你做这件事
  • ViewPager 中的片段在旋转时不会在其 RecyclerView 中显示任何内容

    我在与 TabLayout 集成的 ViewPager 中有 4 个片段 这些片段中的每一个都包含一个 RecyclerView 因为我正在显示未知数量的列表项 这些项目是按日期加载的 因此我有两个按钮可以让您更改日期 然后根据设置的日期加
  • 在 JSF 组件中使用 render 是否足以安全地防止伪造的操作调用?

    我们一直使用自定义 Secure 拦截器来保护我们的支持 bean 方法 以防止伪造该方法的调用 但最近 我突然意识到 如果调用操作的组件未呈现 则这些方法将无法访问 据我了解 JSF 将生成视图 并且如果组件不是根据权限呈现的 例如带有
  • Azure 事件中心是否保证至少一次传递?

    我正在构建一个 Azure Web 应用程序 我想将活动日志发送到 Azure 事件中心 如果应用程序主机和事件中心之间的连接丢失会发生什么 事件中心客户端是否实现某种本地队列 TLDR 是的 EventHubs 提供至少一次交付 Even
  • ASP.NET:自定义动态填充站点地图(SiteMap Provider)

    我正在尝试写我自己的第一个SiteMapProvider子类 它旨在使用一堆不同的数据库查找动态填充 就像我在网上找到的所有示例一样 然而 有很多事情我不太清楚 这是我的第一个问题 Why is StaticSiteMapProvider几
  • 函数内部由 ddply 中指定的变量组成的子集

    通常 我需要通过对应用 ddply 的另一个 data frame 进行子集化的变量来对函数内的 data frame 进行子集化 为此 我再次显式地在函数内写入变量 我想知道是否有更优雅的方法来做到这一点 下面我举了一个简单的例子 只是为
  • 如何使用 matlab 从 yuv 420 视频剪辑中提取帧并将它们存储为不同的图像?

    如何从 yuv 420 视频中提取帧 假设我想将它们存储为静态图像 如何 这是来自MathWorks 文件交换那应该做你想做的事 将 YUV CIF 4 2 0 视频文件转换为图像文件 by Da Yu 功能loadFileYuv从上面的提
  • 中的每个文件创建 FormData 实例

    我正在尝试使用输入文件multiple属性并拆分 formData 这样我就可以为多文件元素中的每个文件提供一个 formData HTML
  • 使用 ITextSharp 创建可填写的 PDF 表单

    我使用 Acrobat Adob e 8 创建了一个包含可填写字段的 PDF 文件 可以使用 ITextSharp 而不是 Adob e 进行编程吗 注意 我并不是指使用 ITextSharp 填写 PDF 而是我想create使用 ITe
  • 将时区添加到 data.table 中的 POSIXct 对象

    我有一个 data table 对象 其中日期和时间列存储为 IDate ITime 对象 我还有一个时区列 其中时区以字符形式给出 现在我想创建一个使用 POSIXct 格式的 DateTime 列 但是我不知道如何向对象添加正确的时区
  • 有没有办法判断 python 是否使用“--with-threads --enable-shared”进行配置和编译?

    这是针对 Debian Squeeez 上的 Python 2 6 6 我试图查明 debian 附带的二进制文件是否配置了以下标志 with threads enable shared 就好像它们不是一样 我需要自己从源代码编译和安装 w
  • Solidity 中的动态数组

    我想声明一个简单的数组 动态列表 一个set函数推入一个字符串和一个get函数返回动态数组中保存的所有字符串 我搜索了很多但找不到这个简单的东西 这是我的解决方案 你需要experimental ABIEncoderV2返回字符串数组 pr
  • 如何在 DASH 内容的

    我已使用以下方式在网页中嵌入了 DASH 视频
  • ID/类别选择器

    我对 jQuery 选择器有一些问题 假设我想选择 elementID 但是elementID是一个变量 除了以其他方式执行此操作之外 还有其他可能性var variable elementID variable 我的意思是没有指定 还有其
  • 扩展并仅指定已知属性?

    我试图提供一个接受给定类型的映射的接口 并将其用于运行时逻辑和编译时类型 就像是 type SomeType a string b a string b string magicalFunction a 1 1 return type is
  • 在 __init__ 中使用继承的类方法

    我有一个由几个孩子继承的父类 我想使用父母的初始化其中一个孩子 classmethod初始化器 我怎样才能做到这一点 我试过 class Point object def init self x y self x x self y y cl