Python 在u_init中使用属性设置器__
如何在Python 在u_init中使用属性设置器__,python,Python,如何在\uuuu init\uuuu中使用属性设置器,而不让pylint抱怨该属性已在\uuuu init\uuu外部定义 例如,下面的代码只生成一个异常,该异常在底部的try子句中捕获 class CircleNotUsingSetterInInit(object): def __init__(self, radius): # Notice underscore in 'self.radius self._radius = radius @p
\uuuu init\uuuu
中使用属性设置器,而不让pylint抱怨该属性已在\uuuu init\uuu
外部定义
例如,下面的代码只生成一个异常,该异常在底部的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")
class CircleNotUsingSetterInit(对象):
定义初始(自身,半径):
#请注意“self.radius”中的下划线
自半径=半径
@财产
def半径(自身):
返回自我半径
@半径设定器
def半径(自身,半径):
如果半径小于0:
提升值错误(“半径必须为非负”)
自半径=半径
类CircleusingSetterInit(对象):
定义初始(自身,半径):
#注意“self.radius”中缺少下划线
自半径=半径
@财产
def半径(自身):
返回自我半径
@半径设定器
def半径(自身,半径):
如果半径小于0:
提升值错误(“半径必须为非负”)
#来自派林:
#在初始化外部定义的属性“\u radius”(在初始化外部定义的属性)
自半径=半径
循环使用SetterInit(5)
CircleNotUsingSetterInit(-1)
CircleusingSetterInit(5)
尝试:
CircleusingSetterInit(-1)
除值错误外:
打印(“捕获异常”)
我使用的是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
class CircleusingSetterInit(对象):
# ....
@半径设定器
def半径(自身,半径):
如果半径小于0:
提升值错误(“半径必须为非负”)
#pylint:disable=W0201
自半径=半径
W0201
是在init外部定义的属性的代码,它是您根据收到的警告。您应该始终添加尽可能靠近源代码的禁用注释,以便pylint在文件的其余部分正常工作。CircleusingSetterInit
是正确的行为,您可以忽略这一点,请注意,您只需使用在init外部定义的disable=attribute
,这意味着读者无需查找代码@jonrsharpe,哦,是的,因为pylint v0.25.3我相信这是对的: