Улучшить производительность декоратора свойств? - PullRequest
0 голосов
/ 21 января 2019

Я пытался понять и использовать декоратор свойства в основном для того, чтобы сделать свойство доступным только для чтения. Я видел, что каждый раз, когда свойство используется, оно входит в декоратор свойства.

В моем примере он входит в декоратор три раза, один раз для каждого отпечатка:

class PropTest:

    def __init__(self,x):
        self._x = x

    @property
    def x(self):
        return self._x

    def check(self):
        print(self.x + 1)
        print(self.x + 2)
        print(self.x + 3)

t = PropTest(3)
t.check()

Если я определю свойство в __init__, оно будет введено только один раз.

class PropTest:

    def __init__(self,x):
        self.x = x

    def check(self):
        print(self.x + 1)
        print(self.x + 2)
        print(self.x + 3)

t = PropTest(3)
t.check()

Я неправильно использую декоратор? Есть ли проблемы с производительностью при использовании?

L.E. :

Вот как я пытаюсь использовать декоратор свойств. Я не хочу читать Excel каждый раз, когда используется это свойство, и хочу, чтобы информационный кадр был только для чтения.

@property
def rules_df(self):
    """
    :return: A dataframe that contains the rules for labels
    """
    self._rules_df = pd.read_excel(self.cfg_file)
    return self._rules_df

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Нет смысла создавать свойство только для того, чтобы выставить атрибут объекта. Вы используете свойство, если вам нужно добавить немного логики. Свойства очень часто используются в таких языках, как Java, C #, но в таких языках, как Python, вы можете напрямую обращаться к атрибуту, не создавая свойства. Доступ к атрибуту объекта через свойство оказывает влияние на производительность, как вы видите в своем примере. Ваш второй пример - более Pythonic способ кодирования.

0 голосов
/ 21 января 2019

Вы правильно используете свойство в первом примере.Во втором примере вы не используете свойство, а просто устанавливаете член объекта.

Свойство - это просто синтаксический сахар для того, чтобы метод действовал как поле.

Может бытьнебольшой удар по производительности.Обычно не о чем беспокоиться.

Если вы хотите установить значение свойства , этот Q / A на SO может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...