我在Jupyter中运行以下代码:
from typing import List
class dummy:
def __init__(self, dum: List =[]):
self.dum = dum
@property
def dum(self) -> List:
return self.dum
@dum.setter
def dum(self, value: List) -> None:
self.dum = value
当我运行以下命令时:
dummy(dum=[1,2,3])
内核在没有告诉我可能的错误的情况下死亡。发生了什么事?
@property
def dum(self) -> List:
return self.dum
创建一个无限递归。
属性本身应该有一个不同的名称。按照约定,它通常是带有下划线前缀的属性名。
当我们使用它时,应该避免使用默认的可变参数。
mypy
不喜欢隐式Optional
注释,所以List = None
应该是Optional[List] = None
。
from typing import List, Optional
class dummy:
def __init__(self, dum: Optional[List] = None):
self.dum = dum if dum is not None else []
@property
def dum(self) -> List:
return self._dum
@dum.setter
def dum(self, value: List) -> None:
self._dum = value