+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

是否有替代允许类的__init__创建另一个类对象?

发布于2021-03-02 15:35     阅读(128)     评论(0)     点赞(23)     收藏(1)


0

1

2

3

4

5

这与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创建为Integer?显然这是合理的,因为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_ _

0

1

2

3

4

5

6

7

8

9



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/869889/32ca8d53150a704825ed/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

23 0
收藏该文
已收藏

评论内容:(最多支持255个字符)