[英]kernel dies after @property in python
I am running the following code in Jupyter:我在 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
When I run the following:当我运行以下命令时:
dummy(dum=[1,2,3])
The kernel dies without telling me much about the possible error. kernel 没有告诉我很多可能的错误就死了。 What is going on?
到底是怎么回事?
@property
def dum(self) -> List:
return self.dum
This creates an infinite recursion.这创建了一个无限递归。
The attribute itself should have a different name.属性本身应该有一个不同的名称。 As per convention, it is usually the name of the property prefixed with an underscore.
按照惯例,它通常是带有下划线前缀的属性名称。
While we are at it, default mutable arguments should be avoided .当我们这样做时, 应该避免使用默认的可变 arguments 。
mypy
does not like implicit Optional
annotations, so List = None
should be Optional[List] = None
. 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.