初始化类后调用方法的最佳方法

时间:2014-12-03 16:25:59

标签: python optimization

我有以下示例类:

import os

class Backup(object):

    def __init__(self, path, name):
        self.path = src = os.path.abspath(os.path.expanduser(path))
        self.name = name

    def read_dir():
        for path, dirs, files in ow.walk(self.path):
        ...

我想知道什么是最好的" pythonic"方法调用方法read_dir。

我应该只初始化类,然后调用类似的方法:

backup = Backup('/home/foo', 'my_backup')
backup.read_dir()

我应该在__init__中调用方法,如下所示:

def __init__(self, path, name):
    self.path = src = os.path.abspath(os.path.expanduser(path))
    self.name = name
    self.read_dir()

任何最佳做法?

3 个答案:

答案 0 :(得分:1)

如果每次初始化对象时都需要调用read_dir()方法,我只需在构造函数中调用它,就像在第二个示例中所做的那样。我认为就是这种情况,因为类似乎必须有一个文件才能实际运行。如果由于某种原因需要再次重新读取该对象中的文件,则可以像在第一个示例中一样调用构造函数之外的方法。 '最佳实践'是非常情境化的,尤其是当你构建自己的方法和类时。

否则,您拥有的第一个示例更可取。我想不出一个公然的“pythonic”#39;这样做的方式。这实际上是面向对象的最佳实践,并且不是特定于语言的。

答案 1 :(得分:0)

对此没有一般的'最佳实践',它甚至不是特定于python的问题。

通过回答这个问题为您选择了您选择的路线:

“在调用read_dir()之前对象是否可用?”

  • 如果答案是肯定的,那么我会将其留给客户端进行调用 read_dir()
  • 如果他们无法理解对象 直到调用read_dir(),然后从 init
  • 调用它

要考虑的另一件事是read_dir是否可以抛出异常。在对象构造期间抛出异常是您通常希望避免的,因为它可能使事物处于不确定状态。

但是,可以懒惰地调用read_dir(),方法是使用一个实例变量来记录是否已经调用了read_dir(),然后在需要它作为前提条件的任何其他方法中进行检查。

答案 2 :(得分:0)

正如其他人所说,答案取决于你想要做什么。 如果您不关心类的可重用性,并且可以保证在初始化对象时始终执行read_dir(),那么您可以在构造函数中包含该方法。

但是,如果您关心能够在将来的其他工作中重用此备份类,那么您将编写。最好将其从构造函数的实现中删除,并将您的类设计为更灵活和更通用,以便调用者可以更好地控制工作流,因此他们可以选择何时调用read_dir()甚至不调用它一点都不。

相关问题