Я знаю, что есть много сообщений на эту тему, но у меня возникли проблемы с пониманием концепции. Поэтому я написал сценарий, и технический директор моей компании отругал меня за это, сказав, что это плохой стиль, поскольку он использует экземпляр объекта, который является глобальным переменным, который создается только в основной части сценария. Следовательно, функция не будет работать при импорте из другого места, где экземпляр не доступен глобально.
Редактировать: вот точная формулировка жалобы:
Функция def updateValues(...)
, например, использует экземпляр объекта, который является глобальной переменной и толькосоздано в основной части сценария. Эта функция не будет работать при импорте из другого места, где такой экземпляр недоступен в глобальной области видимости. Это плохой стиль программирования.
По моему мнению, я передаю экземпляр объекта функции в вызове, и поэтому он фактически не использует глобальную переменную. Ответы на вопросы остались без ответа, так как он уехал в отпуск. Тем не менее, это нужно развернуть, и я не уверен, что делать дальше, поэтому я обращаюсь к SO за помощью. Может быть, кто-то здесь знает, что он имел в виду :).
Это упрощение сценария:
# This is called when the object instance is created
def getInitialValues(projectID,initial_time):
timeseries_1,timeseries_2 = getData(projectID,initial_time)
value_1,value_2 = makeInitialCalculations(timeseries_1,timeseries_2)
return value_1,value_2
# This is called once a minute to update the values with the new data
def updateValues(Object,time):
# actually I only grab the "new" data since the last call of course, out of simplicity I didn't put that in here :)
timeseries_1,timeseries_2 = getData(Object.projectID,time)
Object.value_1,Object.value_2 = makeUpdateCalculations(Object.value_1,Object.value_2,timeseries_1,timeseries_2)
class Functions():
def __init__(self,projectID,initial_time):
self.projectID=projectID
self.value_1,self.value_2 = getInitialValues(projectID,initial_time)
'''MAIN PART OF SCRIPT'''
# creating the object instance
obj_instance = Functions(projectID,datetime.now())
# the loop that is deployed on the server
while True:
sleep(60)
updateValues(obj_instance,datetime.now())
putNewValuesInDatabase(obj_instance)