背景:我有一个类用寄存器建模一个芯片,该芯片有一堆寄存器,其中一个是内置的高温极限温度传感器。在
我有以下内容:
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
我不在__init__
中声明self._hiTemp
是因为用户可能不关心芯片的温度感应能力。用户可以用不同的方式使用芯片,给这个变量一个无意义的值是没有意义的。但是,如果用户试图在没有首先设置self._hiTemp
的情况下使用它,那么使用未声明变量的错误比诸如比较数字和无(或者在某些情况下甚至根本没有错误)之类的模糊错误更容易调试/回溯。在
这一切都很顺利,直到我启动pylint,当然我得到W0201:Attribute defined outsideinit几乎所有地方。我只是想知道这种编码方式是否受到反对,如果是的话,“Python式的方式”是什么。在
谢谢
如果您希望通过方法设置对象的特定属性,那么在初始值设定项中始终可以使用该属性。您只需使用
self._hiTemp=None
,您已经通过_
将其声明为私有,因此用户将理解为不依赖它。在我的方法是将它设置为
None
或其他一些“自然”中不会出现的sentinel值。然后,对于需要设置它的操作,请使用assert
来快速失败,以防调用方试图不适当地使用您的对象。在Python不是Java,所以不要像那样编写getter和setter。你可以这样解决你的问题
相关问题 更多 >
编程相关推荐