我的问题与我遇到的问题无关。。我的问题涉及"良好实践",甚至更多:有意义的实践。我已经用不同的语言编写了许多脚本,我熟悉PEP-8编码标准,所以我并不是要求你们从这个角度来看待我的代码,而是从实际的角度来看待:下面的内容有意义吗?或者在这个例子中,一个简单的函数(带有一些、一些、**kwargs(也被认为是好的吗?我正在考虑是否应该考虑更多地与班级合作。
谢谢你花时间阅读我的帖子。最好的!
import pandas as pd
import numpy as np
import os
import re
import time
def reset_values_to_default():
dict_of_values = {
'FilePath' : 'C:/PythonProjects/Compare/output/ Report from 23-02-2020.xlsx',
'Planned in period' : 0,
'Backlog from last month' : 0,
'Current planned date' : pd.to_datetime('01-01-' + pd.Timestamp.now().strftime('%Y')).date(),
'Current month' : pd.Timestamp.now().month,
'Days in current month' : pd.Timestamp.now().days_in_month,
'Routing' : 1,
'Feasible' : False,
'Organization Name' : 'test_organization'
}
return dict_of_values
class planning:
def __init__(self, parameters):
name = 'create planning for: '
self.parameters = parameters
self.file_path = parameters['FilePath']
self.routing = parameters['Routing']
self.org_name = parameters['Organization Name']
planning.get_main_data(self)
if self.routing == 1:
planning.standard_planning_route(self)
elif self.routing == 2:
planning.custom_planning(self)
print(name, self.org_name)
def standard_planning_route(self):
print('activating variant 1')
df = self.frame['ID']
def custom_planning(self):
print('activating variant 2')
df = self.frame['ID']
return df
def get_main_data(self):
if not os.path.exists(self.file_path):
print('no input file found, quitting function')
exit()
else:
self.frame = pd.read_excel(self.file_path, sheet_name='Master')
#return self.frame
x = planning( reset_values_to_default() ).custom_planning()
print(x)
有几件事。
在reset_values_to_default()
中,您可以将pd.Timestamp.now()
保存为一个变量,然后在dict中使用它。这是一种边缘情况,但它可以防止对pd.Timestamp.now()
的后续调用重叠两个不同的月份。
类的第一个字母应大写。
class Planning:
pass
正如@MatsLindh所提到的,kwargs
比这里的dict要好。或者在构造函数中只需要参数,因为如果不提供它们,无论如何都会得到KeyError
。
def __init__(self, file_path, routing, org_name):
self.file_path = file_path
self.routing = routing
self.org_name = org_name
或使用kwargs
def __init__(self, **kwargs):
self.file_path = kwargs['file_path']
self.routing = kwargs['routing']
self.org_name = kwargs['org_name']
# Planning(file_path='/path', routing='routes', org_name='stackoverflow')
您是第一次在__init__
方法之外设置实例变量。不建议这样做。而且看起来不需要存储self.routing
或self.file_path
。你可以这样做:
def __init__(self, file_path, routing, org_name):
self.org_name = org_name
if not os.path.exists(file_path):
print('No input file found. Exiting...')
raise FileNotFoundError()
self.frame = pd.read_excel(file_path, sheet_name='Master')
print(f'Activating variant {routing}')
self.df = self.frame['ID']
planning = Planning(reset_values_to_default())
print(planning.df)
我建议您使用sys.exit,尤其是如果您的代码要部署到生产环境中。此外,我建议使用记录器,而不是打印语句记录器。此外,类名的第一个字母应该是大写的。
你也可以添加一些评论如下(而不是在函数上方添加(:
def get_main_data(self):
'''
Some comments here
'''
if not os.path.exists(self.file_path):
print('no input file found, quitting function')
exit()
else:
self.frame = pd.read_excel(self.file_path, sheet_name='Master')
#return self.frame