Python:属性和设置器

2024-09-26 22:54:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为库编写一些代码,但我不确定它是否有效。 我应该设置一些变量,比如横摇,俯仰,偏航,油门。 我必须写所有的属性和setter吗? 这是最好的方法吗?你知道吗

@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

Tags: 方法代码selfreturnif属性valuedef
1条回答
网友
1楼 · 发布于 2024-09-26 22:54:24

I'm writing some code for library, but I'm not sure, whether it is efficiency or not. I should set variables like roll, pitch, yaw, throttle. do I have to write all property and setter? is it best way?

首先,要小心过早地优化代码。当有人试图优化他们的代码时,实际发生的情况往往是,他们在程序中引入了不必要的bug。这并不是说你应该永远不要优化你的代码。当他们显然有空间重组代码以提高效率时,就这样做。但要避免过于“聪明”,盲目地“优化”那些不明显的东西。你知道吗

说了这么多,你的代码看起来不错。您使用的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)

相关问题 更多 >

    热门问题