代码之家  ›  专栏  ›  技术社区  ›  Daan

在exec()python中调用私有类函数

  •  1
  • Daan  · 技术社区  · 8 年前

    class test():
        def __init__(self,name):
            self.name = name
    
        def __private(self):
            print(self.name)
    
        def public(self):
            exec("self.__private()")
    
    obj = test('John')
    obj.public()
    

    1 回复  |  直到 8 年前
        1
  •  2
  •   vaultah    8 年前

    以两个下划线开头且不以两个下划线结尾的属性名称受 name mangling

    当你这么做的时候

    def __private(self):
        print(self.name)
    

    在类定义中,实际上创建了一个名为 _<ClassName>__private

    您仍然可以按以下方式正常访问它: __private 在类主体内(使用适当的限定符,例如 self ,如果适用),但为了通过 exec eval ,或在类主体之外,必须使用其全名:

    def public(self):
        exec('self._test__private()')