如何在中使用属性设置器__init__
没有 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
W0201
是代码attribute-defined-outside-init
,这是您收到的警告the docs http://docs.pylint.org/features.html。您应该始终在尽可能靠近源的位置添加此类禁用注释,以便 pylint 对于文件的其余部分正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)