python私有方法返回值

时间:2012-10-01 12:49:50

标签: python

我是OOP的新手,因此我有一个问题。说我有一个简单的类,有一个公共方法和一个私有方法。如果我在公共方法中调用私有方法 - 它应该返回一个值,还是应该将该值设置为我的对象中的字段,例如:

class Test:
    def __init__(self, path):
        self.path = path
    def __getNoOfFiles(self):
       'count files in self.path'
       return no_of_files
    def readDir(self)
        ...
        no_of_files = __getNoOfFiles()

class Test:
    def __init__(self, path):
        self.path = path
        self.no_of_files = 0
    def __getNoOfFiles(self):
       self.no_of_files = 'count files in self.path'
    def readDir(self)
        __getNoOfFiles()
        no_of_files = self.no_of_files 

4 个答案:

答案 0 :(得分:2)

IMO的吸气剂和制定者应该是公开的;即,不要在方法的签名之前加上双下划线。同样在Python中,如果要在特定的类实例之外使用它,通常只需访问该值。

关于getter和setter实用程序的讨论应该在你的第一个OOP步骤中帮助你更多;你可以先阅读question

答案 1 :(得分:1)

你可以这样做。它没有太大的区别......(但是一个重要的区别是,在第二种情况下,你正在为你的实例创建一个额外的实例属性..如果你想要它在其他方法中使用,那么这是合适的) 此外,您无需在公共方法中创建local variable以使用创建的实例属性。您可以直接访问instance attribute ..

第二案例中,您无需在公共方法中执行此操作: -

no_of_files = self.no_of_files

你可以直接access your instance attribute ..

你应该在self实例上调用你的方法..你不能只用它的名字来调用它。 所以,你应该替换: -

__getNoOfFiles()

: -

self.__getNoOfFiles()

__getNoOfFiles()并不像__get_no_of_files()那样具有pythonic - 只是一个建议。

答案 2 :(得分:1)

在大多数情况下,它没什么区别,但选择这种或那种方式的原因很少。如果该值可能不止一次被使用并且计算成本,则将其缓存在类实例中可能会有所帮助。但是类通常包含除了从实例返回值之外什么都不做的方法,因此返回值选项适合该样式。

一般来说,无论你的眼睛看起来更好看。

答案 3 :(得分:0)

这完全取决于你。你需要在no_of_files之外readDir吗?如果是的话,可能值得保存它。如果不是......

请注意,在您的示例中,您应该使用no_of_files = self.__getNoOfFiles():在方法之前需要self ..