我最近幾個月從頭開始重寫我的Python算法的新版本。我的目標之一是編寫完善的文檔代碼,易於閱讀和理解「任何人」。使用類作爲函數和「全局」變量容器:糟糕的設計?
在同一個項目文件夾中,我放了很多不同的模塊,每個模塊都包含一個類。我使用類作爲函數和相關變量容器,這樣一個類包含具有特定任務的所有函數,例如在Excel文件上打印算法的所有輸出結果。
下面的例子:
Algorithm.py
import os
import pandas as pd
import numpy as np
from Observer import Observer
def main(hdf_path):
for hdf_file in os.listdir(hdf_path):
filename = str(hdf_file.replace('.hdf', '.xlsx'))
Observer.create_workbook(filename)
dataframe = pd.read_hdf(hdf_file)
years_array = dataframe.index.levels[0].values
for year in years_array:
year_mean = np.mean(dataframe.loc[year].values)
Observer.mean_values = np.append(Observer.mean_values, dataframe_mean)
Observer.export_result()
if __name__ == "main":
hdf_path = 'bla/bla/bla/'
main(hdf_path)
Observer.py
import numpy as np
import openpyxl
class Observer:
workbook = None
workbookname = None
mean_values = np.array([])
def create_workbook(filename):
Observer.workbook = openpyxl.Workbook()
Observer.workbookname = filename
# do other things
def save_workbook():
Observer.workbook.save('results_path' + Observer.workbookname)
def export_results():
# print Observer.mean_values values in different workbook cells
# export result on a specific sheet
我希望你可以從這個簡單的例子,我怎麼用理解我的項目上課。對於每個類我定義了很多變量(例如工作簿),並且我將它們從其他模塊中調用,就好像它們是全局變量一樣。通過這種方式,我可以從任何地方輕鬆訪問它們,而且我不需要將它們明確地傳遞給函數,因爲我可以簡單地編寫Classname.varname。
我的問題是:這是不好的設計?它會造成一些問題或性能下降嗎?
感謝您的幫助。
感謝您的回答。我會重寫所有的東西,試圖只使用模塊的功能,因爲你很可能理解,我不需要上課。只是好奇,我的設計是否以任何方式折磨演出?謝謝。 – ilpomo