Python 我写在下面的类会被认为是正确的代码吗

Python 我写在下面的类会被认为是正确的代码吗,python,function,class,Python,Function,Class,我的问题与我遇到的问题无关。。我的问题涉及“良好实践”,甚至更多:有意义的实践。我已经用不同的语言编写了许多脚本,并且我熟悉PEP-8编码标准,所以我不是要求你们从这个角度来看我的代码,而是从实用的角度来看:下面的内容有意义吗,或者在这个示例中,简单的函数(有一些,一些,**kwargs)也被认为是好的吗?我在想我是否应该考虑更多的工作。 感谢您抽出时间阅读我的帖子。祝大家万事如意 import pandas as pd import numpy as np import os import r

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

我建议您使用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)