我正在为库编写一些代码,但我不确定它是否有效。 我应该设置变量,如滚动,俯仰,偏航,油门。 我必须写所有财产和制定者吗? 这是最好的方式吗?
@property
def roll(self):
return self._roll
@roll.setter
def roll(self, value):
if(not isinstance(value, int)):
print("You should put the integer number!")
value = int(value)
if value > 100:
value = 100
elif value < -100:
value = -100
self._roll = value
答案 0 :(得分:1)
我正在为库编写一些代码,但我不确定它是否有效。我应该设置变量,如滚动,俯仰,偏航,油门。我必须写所有财产和制定者吗?这是最好的方式吗?
首先,请小心尝试过早优化代码。当有人试图优化他们的代码时,实际发生的事情往往是他们在程序中引入了不必要的错误。这并不是说您永远不会优化您的代码。当他们显然有足够的空间重新构建代码以提高效率时,请这样做。但要避免过分聪明的事情。盲目地优化&#39;事情并不明显。
总而言之,您的代码看起来很好。您完全按照应使用的property
使用;在获取和设置属性期间执行额外的必要工作(通常更多设置),而不会强迫您的类的用户使用方法调用。不要过分关注自己的效率。只要你不做一些明显低效的事情,你的罚款。正如@match在评论中所说,使用property
更多的是提供可维护性,稳定性和可读性,而不是效率。
但是,有几个小区域可以改进您的代码。即您的类型和边界检查。您可以将其提取到单独的方法中并在需要时调用它:
def _check_value(value):
try:
value = int(value)
except ValueError as err:
raise ValueError('only integer values are permitted') from err
if value > 100:
return 100
elif value < -100:
return -100
return value
@property
def roll(self):
return self._roll
@roll.setter
def roll(self, value):
self._roll = self._check_value(value)
@property
def pitch(self):
return self._pitch
@pitch.setter
def pitch(self, value):
self._pitch = self._check_value(value)