【问题标题】:Using externally defined function/variable vs internal method/attribute使用外部定义的函数/变量与内部方法/属性
【发布时间】:2023-03-09 23:51:01
【问题描述】:

我想知道这个问题有一段时间了,但仍然不确定合适的答案。 如果已经有很好的答案,对不起。

什么时候使用在类中模块中某处定义的函数或变量而不是将其定义为方法/属性的好用例?

例子:

PATH_TO_DIR = "abc\\def"

class Reader:
    def __init__(self, file_name):
        self.file_name = file_name

    def read_file(self):
        return pd.read_excel(os.path.join(PATH_TO_DIR, self.file_name))

class Reader:
    PATH_TO_DIR = "abc\\def"

    def __init__(self, file_name):
        self.file_name = file_name

    def read_file(self):
        return pd.read_excel(os.path.join(self.PATH_TO_DIR, self.file_name))

同样的问题困扰着我关于函数/方法,例如我们可以定义 read_file() 函数并在外部类中使用它。

我觉得将其定义为方法/属性更有意义,但我看到很多代码中这些部分是在外部定义的。

我想知道关于 python 编程良好实践的答案 - 我知道语言能够处理很多奇怪的事情,但事实并非如此;)

【问题讨论】:

    标签: python function class oop methods


    【解决方案1】:

    我倾向于选项 3:将正确的绝对路径传递给 Reader.__init__Reader 的工作,大概就是解析文件,不用担心文件系统布局。

    PATH_TO_DIR = "abc\\def"
    
    class Reader:
        def __init__(self, file_name):
            self.file_name = file_name
    
        def read_file(self):
            return pd.read_excel(self.file_name)
    
    
    r = Reader(os.path.join(PATH_TO_DIR, "foo.xl"))
    

    【讨论】:

      【解决方案2】:

      我相信,一个好的做法是在外部定义它,因为这样你可以更容易地重用这个函数。此外,您可以在其他函数/类中重用相同的变量。 在您的第一个示例中,您正在定义可在多个类中使用的变量。同样的类也可以由您没有设计的其他脚本导入。 在第二个例子中——你只能在这个函数中使用这个变量,如果你想在其他地方重用这个函数——你必须在初始化后覆盖这个变量。这意味着运行__init__() 方法。

      就我个人而言,我避免在类和函数中定义变量。

      【讨论】:

        猜你喜欢
        • 2021-08-20
        • 2019-10-05
        • 1970-01-01
        • 1970-01-01
        • 2012-12-02
        • 1970-01-01
        • 1970-01-01
        • 2016-10-12
        • 1970-01-01
        相关资源
        最近更新 更多