Как получить номер строки, если несколько строк совпадают в одном и том же порядке

Я иногда использую getattr(..) для ленивого инициализации атрибутов вторичной важности непосредственно перед тем, как они используются в коде.

Сравните следующее:

class Graph(object):
    def __init__(self):
        self.n_calls_to_plot = 0

    #...
    #A lot of code here
    #...

    def plot(self):
        self.n_calls_to_plot += 1

К этому:

class Graph(object):
    def plot(self):
        self.n_calls_to_plot = 1 + getattr(self, "n_calls_to_plot", 0)

Преимущество второго способа заключается в том, что n_calls_to_plot появляется только вокруг места в коде, где он используется. Это полезно для читаемости, потому что (1) вы можете сразу увидеть, какое значение оно начинает при чтении, как оно используется, (2) оно не вводит отвлечение в метод __init__(..), который в идеале должен быть о концептуальном состоянии класса, а не некоторый счетчик коммунальных услуг, который используется только одним из методов функции по техническим причинам, таким как оптимизация, и не имеет ничего общего со значением объекта.

-1
задан Boogeyman 2 March 2019 в 08:18
поделиться