如何解决是否有允许类的 __init__ 替代创建另一个类对象的覆盖?
这与 sympy 模块有关。例如,
x,y = symbols('x y')
expr = Mul(x * y)
type(expr) == Mul
将返回 true。然而,
x,y = 1,2
expr = Mul(x * y)
type(expr) == Mul
将返回 false。更具体地说,第二种情况下的 expr 是 Integer(2) 所以我想知道 Mul 是否是一种类型,expr 是如何创建为整数的?这显然是合理的,因为 1 * 2 应该只是 2,而不是一个表达式,但你如何实现这一点?我已经考虑过 Mul 可能是一个根据情况返回的函数的可能性,但这并不能解释它如何也可以是一种类型
解决方法
这是使用 __new__
而不是 __init__
完成的:
>>> class A: pass
...
>>> class B:
... def __new__(cls,arg):
... if arg < 0:
... return A()
... else:
... return super().__new__(cls)
...
>>> B(1)
<__main__.B object at 0x7fc72df68b20>
>>> B(-1)
<__main__.A object at 0x7fc72df68880>
https://docs.python.org/3/reference/datamodel.html#object.__new__
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。