【问题标题】:How to call a private (file scope) function from a class define in the same file如何从同一文件中定义的类中调用私有(文件范围)函数
【发布时间】:2020-04-11 21:24:57
【问题描述】:

在一个文件中,我定义了一个类和一个私有函数。我想在一个方法中调用这个函数。引用类的“外部作用域”并告诉 python 我的函数在哪里的语法是什么? (:

不起作用的实际示例:

def __private_function():
    pass

class MyClass:
    def my_method(self):
        __private_function()

错误:NameError: name '_MyClass__private_function' is not defined

铌:

Calling private function within the same class python 相似但不重复。

【问题讨论】:

  • 你试过使用单下划线吗?它将避免名称修改。
  • 我不得不说我对这种行为感到非常惊讶:-/ 现在实际上很少有理由使用双前导下划线名称修饰机制,尤其是对于普通函数。约定是使用一个前导下划线来表示“实现”内容(将其视为“受保护”的python等效项)。

标签: python


【解决方案1】:

使用单下划线避免名称混淆。

def _private_function():
    print('use single underscore to avoid name mangling.')

class MyClass:
    def my_method(self):
        _private_function()

a = MyClass()
a.my_method()

【讨论】:

    【解决方案2】:

    这行得通:

    globals()['__private_function']()
    

    但如果可以的话,不要用两个下划线命名函数。我认为在课堂之外没有任何充分的理由。

    【讨论】:

    • 谢谢。实际上,我不需要对这种情况进行名称修改,但很高兴知道您仍然可以访问它。
    猜你喜欢
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多