【发布时间】:2026-01-23 03:30:02
【问题描述】:
所以,我今天才意识到 __new__ 已被弃用以接收参数,从 python 2.6 开始(文档中没有提到它,这在 __new__ 调用 @987654324 的行为方面也是不正确的@据我所知)。这意味着我的功能代码已经开始发出警告,我想摆脱它们。但我看不到一种优雅的解决方法。
我有一堆在构造时执行优化的类。所以我有
class Conjunction(Base):
def __new__(cls, a, b):
if a == True:
return b
elif b == True
return a
else:
return super(Conjunction,cls).__new__(cls, a, b)
等等(真实版本涵盖更多案例)。因此,与 Guido 在 this response(我能找到的唯一引用)中所说的不同,我的 __new__ 方法确实使用了它的参数,并且不能被替换为覆盖__init__ 函数。
我能做的最好的就是把它一分为二:
def Conjunction(a, b):
if a == True:
return b
elif b == True
return a
else:
return ConjunctionImpl(a, b)
class ConjunctionImpl(Base):
# ...
但这实在是太丑了,臭到天上。我是否缺少一种优雅的方式让类构造函数根据给定的构造函数参数返回一些任意对象?
【问题讨论】:
-
这不是构造函数的本意。如果你想要这种行为,请使用一个函数(就像你在第二个例子中所做的那样)。
-
你能说更多吗?这与单例示例有何不同,单例示例始终被用作说明为什么首先需要
__new__的典型示例?
标签: python