奇数语法(继承中的海象运算符)



我正在查找python的语法,并且您可以在继承中使用海象运算符!不相信,我试了一下:

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

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

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

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

玩得开心;-(

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

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

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

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

class bar(((foo))):
pass
class bar((lambda x: x)(foo)):
pass

经过一番实验(和运气(,我发现它适用于重命名类,同时继承它们:

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()

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

相关内容

  • 没有找到相关文章

最新更新