Python 我写在下面的类会被认为是正确的代码吗
我的问题与我遇到的问题无关。。我的问题涉及“良好实践”,甚至更多:有意义的实践。我已经用不同的语言编写了许多脚本,并且我熟悉PEP-8编码标准,所以我不是要求你们从这个角度来看我的代码,而是从实用的角度来看:下面的内容有意义吗,或者在这个示例中,简单的函数(有一些,一些,**kwargs)也被认为是好的吗?我在想我是否应该考虑更多的工作。 感谢您抽出时间阅读我的帖子。祝大家万事如意Python 我写在下面的类会被认为是正确的代码吗,python,function,class,Python,Function,Class,我的问题与我遇到的问题无关。。我的问题涉及“良好实践”,甚至更多:有意义的实践。我已经用不同的语言编写了许多脚本,并且我熟悉PEP-8编码标准,所以我不是要求你们从这个角度来看我的代码,而是从实用的角度来看:下面的内容有意义吗,或者在这个示例中,简单的函数(有一些,一些,**kwargs)也被认为是好的吗?我在想我是否应该考虑更多的工作。 感谢您抽出时间阅读我的帖子。祝大家万事如意 import pandas as pd import numpy as np import os import r
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)
我建议您使用sys.exit,尤其是当您的代码要部署到生产环境时。此外,我建议使用记录器而不是打印语句。此外,类名的第一个字母应该大写 您还可以添加如下注释(而不是在函数上方添加): 有几件事 在
reset\u values\u to\u 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')
您第一次在
\uuuu init\uuuu
方法之外设置实例变量。不建议这样做。而且它看起来并不需要存储self.routing
或self.file\u路径。您可以这样做:
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)
这可能更适合代码审查网站:-我的初步意见是,我尽量避免将字典作为参数发送-您可以使用命名参数(并使用**
解包参数),然后,如您所建议的,在必要时处理任何未知参数(如果你期望并想要处理这些问题,如果不是,就不要支持它们)使用kwargs
。感谢提示!肯定会实现sys.exit并将第一个字母改为大写。用大写字母命名类很重要的原因是什么?很高兴帮助@ko_00。关于大写字母,这是PEP 8命名约定-->感谢提示。您确实正确,某些参数不会更改。
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)