我有以下示例类:
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()
任何最佳做法?
答案 0 :(得分:1)
如果每次初始化对象时都需要调用read_dir()方法,我只需在构造函数中调用它,就像在第二个示例中所做的那样。我认为就是这种情况,因为类似乎必须有一个文件才能实际运行。如果由于某种原因需要再次重新读取该对象中的文件,则可以像在第一个示例中一样调用构造函数之外的方法。 '最佳实践'是非常情境化的,尤其是当你构建自己的方法和类时。
否则,您拥有的第一个示例更可取。我想不出一个公然的“pythonic”#39;这样做的方式。这实际上是面向对象的最佳实践,并且不是特定于语言的。
答案 1 :(得分:0)
对此没有一般的'最佳实践',它甚至不是特定于python的问题。
通过回答这个问题为您选择了您选择的路线:
“在调用read_dir()之前对象是否可用?”
要考虑的另一件事是read_dir是否可以抛出异常。在对象构造期间抛出异常是您通常希望避免的,因为它可能使事物处于不确定状态。
但是,可以懒惰地调用read_dir(),方法是使用一个实例变量来记录是否已经调用了read_dir(),然后在需要它作为前提条件的任何其他方法中进行检查。
答案 2 :(得分:0)
正如其他人所说,答案取决于你想要做什么。 如果您不关心类的可重用性,并且可以保证在初始化对象时始终执行read_dir(),那么您可以在构造函数中包含该方法。
但是,如果您关心能够在将来的其他工作中重用此备份类,那么您将编写。最好将其从构造函数的实现中删除,并将您的类设计为更灵活和更通用,以便调用者可以更好地控制工作流,因此他们可以选择何时调用read_dir()甚至不调用它一点都不。