簡體   English   中英

在__init__中使用屬性設置器

[英]Using Property Setter In __init__

如何在__init__使用Property setter而不讓pylint抱怨該屬性已在__init__之外定義?

例如,以下代碼僅產生一個異常,該異常在底部的try子句中捕獲。

class CircleNotUsingSetterInInit(object):

    def __init__(self, radius):
        # Notice underscore in 'self.radius
        self._radius = radius

    @property
    def radius(self):
        return self._radius

    @radius.setter
    def radius(self, radius):
        if radius < 0:
            raise ValueError("Radius must be non-negative")
        self._radius = radius


class CircleUsingSetterInInit(object):

    def __init__(self, radius):
        # Notice lack of underscore in 'self.radius'
        self.radius = radius

    @property
    def radius(self):
        return self._radius

    @radius.setter
    def radius(self, radius):
        if radius < 0:
            raise ValueError("Radius must be non-negative")
        # From pylint:
        # Attribute '_radius' defined outside __init__ (attribute-defined-outside-init)
        self._radius = radius


CircleNotUsingSetterInInit(5)
CircleNotUsingSetterInInit(-1)
CircleUsingSetterInInit(5)
try:
    CircleUsingSetterInInit(-1)
except ValueError:
    print("caught exception")

我正在使用Python 2.7.10。

在這種情況下,完全可以忽略該警告。 Pylint只是沒有“看到”它,如果不進行語法分析就很難注意到。

您可以為pylint添加注釋,以在本地禁用此警告,如下所示:

class CircleUsingSetterInInit(object):

    # ....

    @radius.setter
    def radius(self, radius):
        if radius < 0:
            raise ValueError("Radius must be non-negative")
        # pylint: disable=W0201
        self._radius = radius

W0201attribute-defined-outside-init的代碼,這是您根據docs收到的警告。 您應始終在盡可能靠近源的位置添加此類禁用注釋,以便pylint在文件的其余部分正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM