我知道有很多与此主题相关的帖子,但是在理解这个概念时遇到了一些麻烦。因此,我写了一个脚本,而公司的CTO则责骂我,说这是不好的风格,因为它使用的对象实例是一个全局变量,仅在脚本的主要部分中创建。因此,从实例不可全局访问的其他位置导入时,该功能将无法使用。
编辑:这是投诉的确切措辞:
功能 @MockBean
,例如,使用对象实例,该对象实例是全局变量,仅在脚本的主要部分中创建。从全局范围内没有此类实例可用的其他位置导入时,此功能将不起作用。那是糟糕的编程风格。
我认为,我将对象实例传递给调用中的函数,因此,它实际上并没有使用全局变量。自从他去度假以来,没有回答过任何问题。但是,这确实需要部署,我不确定如何进行,因此我向SO寻求帮助。也许这里有人知道他的意思:)。
这是脚本的简化:
def updateValues(...)
答案 0 :(得分:1)
该程序可能会起作用,但我认为这不是最佳的编程风格,正如一些评论所建议的那样。顺便说一句,我没有看到putNewValuesInDatabase
的定义,所以我不知道您是否只是为了简洁而忽略了它,或者它是否会存在于导入该文件的文件中。不管。不要混淆这个问题,但这就是我可能会对此进行编码的方式(尽管由于简洁,我可能会将getInitialValues
滚动到__init__
方法中)
class Functions():
def __init__(self,
getData,
makeInitialCalculations,
makeUpdateCalculations,
putNewValuesInDatabase,
projectID):
self.getData = getData
self.makeInitialCalculations = makeInitialCalculations
self.makeUpdateCalculations = makeUpdateCalculations
self.putNewValuesInDatabase = putNewValuesInDatabase
self.projectID = projectID
self.getInitialValues()
self.start_updates()
def getInitialValues(self):
time = datetime.now()
timeseries_1, timeseries_2 = self.getData(self.projectID, time)
self.value_1, self.value_2 = self.makeInitialCalculations(timeseries_1, timeseries_2, time)
def updateValues(self):
time = datetime.now()
timeseries_1, timeseries_2 = self.getData(self.projectID, time)
self.value_1, self.value_2 = self.makeUpdateCalculations(self.value_1, self.value_2, timeseries_1,timeseries_2)
def start_updates(self):
while True:
sleep(60)
self.updateValues()
self.putNewValuesInDatabase(self)
我已经将getInitialValues
和updateValues
包含在您的类({不太知名的)类Functions
中,并简化了界面。请注意,现在必须为此类的构造函数传递函数getData
,makeInitialCalculations
,makeUpdatecalculations
和putNewValuesInDatabase
,这些函数可能来自可能的客户端代码。 位于要导入该文件的其他文件中。然后,我希望客户端代码为:
obj_instance = Functions(getData, makeInitialCalculations, makeUpdateCalculations, putNewValuesInDatabase, projectID)
您可能希望不要让构造函数自动调用start_updates
(或为此getInitialValues
),而让客户端代码手动调用这些方法。