我刚刚了解到新的海象运算符 ( :=
) 不能用于设置实例属性,它应该是无效的语法(引发 a SyntaxError
)。
为什么是这样? (你能提供一个提到这个的官方文档的链接吗?)
我查看了PEP 572,找不到是否/在哪里记录了这一点。
研究
这个答案在没有解释或来源的情况下提到了这个限制:
您不能在对象属性上使用海象运算符
示例代码
class Foo:
def __init__(self):
self.foo: int = 0
def bar(self, value: int) -> None:
self.spam(self.foo := value) # Invalid syntax
def baz(self, value: int) -> None:
self.spam(temp := value)
self.foo = temp
def spam(self, value: int) -> None:
"""Do something with value."""
尝试导入Foo
结果为SyntaxError
:
self.spam(self.foo := value)
^
SyntaxError: cannot use assignment expressions with attribute