Python函数封装(避免在没有适当上下文的情况下意外调用)



我正在拼凑一个小型的内部应用程序,以"自下而上"的方式从我的脑海中转储它。

因此,一旦我发现我正在编写的函数有效,我就想把它变成一个"助手"函数,并防止自己在一个小时或一年后回来编写代码,以我不想调用它的方式调用它

在Java中,我可以创建一个类,使我的"助手"函数成为私有静态方法,并将我"想要"调用它们的代码放入公共静态方法中。

正如我所描述的,避免踩到自己脚趾的蟒蛇方式是什么

这里有一个非常简单的示例函数,我不想让自己从"任何地方"调用:

(例如,也许为了可编辑性,我想将所有需要"simple_salesforce"模块的函数紧密地放在一起,但不想将getAFreshContactList()等函数暴露在控制登录流、确定是否需要新的联系人列表、注销等的异常处理代码之外进行调用)

from simple_salesforce import Salesforce
def getAFreshContactList(sfSession):
    if isinstance(sfSession, Salesforce):
        return sfSession.query("SELECT Id, Name, Email FROM Contact LIMIT 2")['records']

谢谢!

将函数添加到一个单独的助手模块中。不要使用*表示法导入模块,函数调用约定的行为将与Java静态函数完全相同。例如:

my_helper.py:

from simple_salesforce import Salesforce
def getAFreshContactList(sfSession):
    if isinstance(sfSession, Salesforce):
        return sfSession.query("SELECT Id, Name, Email FROM Contact LIMIT 2")['records']

my_program.py

import my_helper
def someFunction:
    my_helper.getAFreshContactList(None)

实际上,Python名称空间的全部目的正是在不同用途的名称之间创建一个分隔。

虽然python约定允许您在模块属性前加下划线,以防止其出现在文档和星形导入中,但python中没有真正私有的东西:

Python中不存在只能从对象内部访问的"私有"实例变量。然而,大多数Python代码都遵循一个惯例:以下划线为前缀的名称(例如_spam)应被视为API的非公共部分(无论是函数、方法还是数据成员)。应将其视为实施细节,如有更改,恕不另行通知。

在Java中,您必须使用反射来调用类的私有声明方法,但在Python中,除了约定之外,没有任何东西可以阻止您直接调用my_helper._myPrivateFunction()。在函数或任何其他属性前面加一个下划线应该只是提醒您在模块外使用它时要格外小心。

相关内容

最新更新