Соглашение Python для указания префикса переменной в целях автоматизации - PullRequest
1 голос
/ 03 мая 2019

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

class MyDocument(Document):
     source1_name = something
     source1_age = something

     source2_x = something

Идея состоит в том, что, хотя имена переменных могут быть любыми, эти предварительные исправления будут важны при выполнении кода, поскольку автоматизация заполняет эти переменные из разных источников данных, прежде чем помещать их в Mongo..

У меня наверняка будет комментарий, объясняющий соглашение об именах, но мне интересно, есть ли соглашение об именах PEP8 для подобных случаев, чтобы дать визуальную очередь разработчику, префикс которого что-то значит.

Если ответ отрицательный - есть ли другие "лучшие практики", когда само имя переменной используется в остальной части кода?

1 Ответ

1 голос
/ 03 мая 2019

Для контекста, в прошлой жизни я работал над базой кода, которая была разработана более 25 лет (и считал). Кодовая база была завалена этими префиксами, которые имели смысл в то время, но по многим причинам со временем, когда данные поступали, больше не имели смысла.

  • Источник 2 стал лучшим местом для извлечения foo, чем источник 1
  • Источник 1 обанкротился
  • Источник 1 был заменен
  • и т.д.

Проблема возникла из-за того, что использование полей было настолько укоренившимся, что обновление было бы огромной задачей, поэтому значение их префиксов стало неактуальным.

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

def __init__(self):
    self.init_source1()
    self.init_source2()

def init_source1(self):
    self.name = foo

def init_source2(self):
    self.x = bar

Если посмотреть на базу кода, то станет ясно, где находится источник, и его можно будет изменить при необходимости

...