python - 覆盖 Python 的 __new__ 方法时复制原始行为
问题描述
说我有以下课程
class Point:
def __init__(self, coords):
self.coords = coords
class Line:
def __init__(self, coords_A, coords_B):
self.A = coords_A
self.B = coords_B
我想Point
在实例化 a 时得到 a Line
with coords_A == coords_B
。我的理解是我可以通过覆盖来做到这一点__new__
。这是我尝试过的:
class Line:
def __new__(cls, coords_A, coords_B):
if coords_A == coords_B:
return Point(coords_A)
return super().__new__(cls, coords_A, coords_B)
def __init__(self, coords_A, coords_B):
self.A = coords_A
self.B = coords_B
但是,这不起作用(调用Line(1, 1)
做我想要的,但Line(1, 2)
引发 a TypeError
)。也不应该,毕竟我不是很想调用__new__
父类的方法,我只是想复制Line.__new__
. 我该怎么做呢?
解决方案
这似乎有效:
class Point:
def __init__(self, coords):
self.coords = coords
class Line:
def __new__(cls, coords_A, coords_B):
if coords_A == coords_B:
return Point(coords_A)
return super(Line, cls).__new__(cls)
def __init__(self, coords_A, coords_B):
self.A = coords_A
self.B = coords_B
推荐阅读
- azure - Azure 持久函数实体绑定未注册 - node.js
- css - 使用 CSS 更改 Woocommerce“我的帐户”页面内容
- visual-studio-code - VS Code、Git 提交和 Electron 非上下文感知本机模块
- sql - 在缺少存储桶的 SQL Server 中计算直方图
- powershell - 在将数据写回之前关闭打开的 CSV。电源外壳
- javascript - 如何使用jquery根据滚动框内容使元素可滚动?
- bash - git 在合并期间是否创建新文件或覆盖现有文件
- c# - 更新与 Xpath 查询匹配的多个 XML 节点 C#
- python - 允许用户更改他在数据库中的订单值
- android - Flutter 不识别 ANDROID_HOME 也不识别 ANDROID_SDK_ROOT