1

我在看python的语法,你可以在继承中使用海象运算符!不信,我试了一下:

class foo: pass
class bar(foobar := foo): 
    def x(self):
        print("it works!")

b = bar()
b.x()

这不会引发任何语法错误(python 3.8.2)!它有什么用,它是如何工作的?

4

3 回答 3

5

它没有用 - 所以不要使用它;-) 那里允许使用任意表达式。例如,这更没用:

from random import choice

class C(choice([int, list])):
    pass

玩得开心 ;-)

于 2020-06-02T21:21:54.300 回答
1

它有什么用,它是如何工作的?

海象运算符在继承中没有特定的用例。它之所以起作用,仅仅是因为该类是一个表达式,因此它允许表达式允许的所有内容,包括海象运算符。正如评论中所指出的,您可以使用以下方法获得相同的结果:

foobar = foo
class bar(foobar):
    ...

表达式中允许的其他内容也可以正常工作,例如括号和函数调用:

class bar(((foo))):
    pass

class bar((lambda x: x)(foo)):
    pass
于 2020-06-02T21:26:35.120 回答
-1

经过一些试验(和运气),我发现它是为了在继承类的同时重命名类:

class foo:
    def __init__(self, x):
        pass

class bar(foobar := foo):
    def __init__(self):
        foobar.__init__(self, 2)

    def x(self):
        print("it works!")

b = bar()
b.x()

如果您删除海象运算符,它将不起作用(显然)。我不确定它到底有什么用。

于 2020-06-02T21:20:28.867 回答