Python:公共方法调用它们的“兄弟”私有方法

时间:2009-10-27 16:01:39

标签: python methods public-method

我一直在编写Python代码只有几个星期,所以我还在弄清楚这块土地的位置。但是,假设我有一个方法可以偶尔由'用户'调用,也可以在内部使用HEAVILY(即,在调用之前已经检查过参数)。以下是我目前正在做的事情:

#The method the 'user' should call:
def do_something(self, arg1, arg2, arg3):
    #write code to do error checking on arg1, agr2, arg3
    #raise exceptions, return codes, etc: depends on whether you are an explicit lover
    #or an implicit lover, it seems. :-)
    ... error checking code here...
    #Now call the 'brother' method that does the real work.
    return self._do_something(self, arg1, arg2, arg3, arg3)

#The method other private methods should call with already validated parameters
def _do_something(self, arg1, arg2, arg3, arg3):
    #don't do error checking on the parameters. get to work...
    ... do what you do...
    return whatever you're supposed to return

这对我来说似乎合乎逻辑。有没有更好的Python-ish方法来做到这一点?

4 个答案:

答案 0 :(得分:2)

没关系。但是,对您的代码中调用“兄弟”方法是错误的。你应该这样做:

# Now call the 'brother' method that does the real work.
return self._do_something(arg1, arg2, arg3, arg3)

也就是说,你应该通过自引用来调用它,因为它是一个对象方法,而不是一个全局函数。

答案 1 :(得分:0)

python中没有对私有成员的“真实”支持,但将成员指定为私有的pythonic方法是使用两个前导下划线。在您的情况下,__do_something

有关详细信息,请参阅python.org - classes

答案 2 :(得分:0)

好吧,除非错误检查代码非常昂贵,否则我只有一个方法,它总是进行错误检查。它可能会重复一些检查,但它确实为您提供了更多的安全性,如果有人从您的班级继承,它可能会派上用场。

如果以后需要性能,您可以随时缓存结果或执行其他操作。

答案 3 :(得分:-1)

我只是自己学习python(并享受它),但我认为这是做到这一点的方法。 但是,私有方法应该有两个下划线,并称为'self .__ do_something()'。