我正在为库编写一些代码,但是不确定是否有效。
我应该设置诸如侧倾,俯仰,偏航,油门之类的变量。
我必须写所有财产和二传手吗?
这是最好的方法吗?
@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
最佳答案
我正在为库编写一些代码,但是不确定是否有效。我应该设置诸如侧倾,俯仰,偏航,油门之类的变量。我必须写所有财产和二传手吗?这是最好的方法吗?
首先,请谨慎尝试过早优化代码。当某人尝试优化其代码时,通常会发生的实际情况是,他们在程序中引入了不必要的错误。这并不是说您永远不要优化代码。当他们显然有空间重组代码以提高效率时,请这样做。但要避免过分“聪明”,盲目“优化”那些不明显的事情。
综上所述,您的代码看起来不错。您使用的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)
关于python - Python:属性和 setter ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48330160/