背景:我有一个用寄存器来建模芯片的类,芯片上有一堆寄存器,其中一个是内置温度传感器的高温极限。
我有以下几点:
class foo():
def __init__(self):
# does not set self._hiTemp!
...
def setHiTemp(self, t):
self._hiTemp = t
def getHiTemp(self):
return self._hiTemp
def checkHiTemp(self):
return self._temp > self._hiTemp我没有在self._hiTemp中声明__init__的原因是因为用户可能不关心芯片的温度感测功能。用户可以以不同的方式使用芯片,给这个变量一个无意义的值是没有意义的。但是,如果用户尝试在不首先设置self._hiTemp的情况下使用它,那么使用未声明的变量的错误要比比较数字和无(或者在某些情况下甚至根本没有错误)等一些模糊错误更容易调试/回溯。
在启动pylint之前,这一切都进行得很顺利,当然,在W0201 init之外定义的属性几乎无处不在。我只是想知道这种编码风格是否会受到反对,如果是的话,"Pythonic方式“是什么。
谢谢
发布于 2011-08-10 02:00:56
我这样做的方法是将其设置为“None”或其他“本质上”不发生的哨位值。然后,对于需要设置对象的操作,请使用assert快速失败,以防调用方试图不适当地使用对象。
def __init__(self):
self._hiTemp = None
def checkHiTemp(self):
assert self._hiTemp is not None, 'Why you no set _hiTemp before checking it?'
return self._temp > self._hiTemp发布于 2011-08-10 02:02:51
如果您希望通过方法来设置对象的特定属性,那么在初始化程序中总是会有它可用的原因。您可以只使用self._hiTemp=None,您已经通过领导_将其声明为私有,因此用户将理解为不依赖于此。
发布于 2011-08-10 02:00:10
习惯上使用值None来表示没有实际价值。您可以在__init__中将其初始化为此。在这种情况下,您还可能使用一个无意义的值,例如负数,并在checkHiTemp方法中检查这个值,如果使用时没有正确初始化的值,则引发自定义异常。这是一个更有意义的错误。
https://stackoverflow.com/questions/7005072
复制相似问题