我下面写的课会被认为是正确的代码吗



我的问题与我遇到的问题无关。。我的问题涉及"良好实践",甚至更多:有意义的实践。我已经用不同的语言编写了许多脚本,我熟悉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.routingself.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

相关内容

最新更新