简体   繁体   English

kernel 在 python 中的@property 之后死亡

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM