如何在类之外隐藏Python类方法(我的意思不是“双下划线”受保护)

问题描述 投票:0回答:1

如果从外部使用该类,我会尝试隐藏该类方法。我有一个 函数 A 执行某些操作,函数 B 使用 A 执行其他操作。例如:

class Some_Class:
   def funcA():
      do something

   def funcB():
      use funcA() to do this

我希望

funcA()
不可见。如果我使 funcA 受保护:
def __funcA():
,好吧,它不能 从外部访问,但是
funcB()
不会执行,因为它需要
funcA()
。 此外,从外面仍然可以看到
funcA()
,即使它受到保护,外面仍然可以看到 看到“它就在那里”。有办法隐藏它吗?以至于外界不知道? 为什么我想要这个只是因为
funcA()
对外界来说是不必要的信息。

我能做的就是把

funcA()
带到课堂之外,但是有没有办法做到这一点并将其保留在课堂内 班级?

跟进:我还尝试用“单下划线”将其设为私有

def _funcA():
但这似乎没有做任何事情。

python
1个回答
0
投票

这个怎么样:

import functools


def expose_as(another_func_name: str):
    def be_private(func):
        @functools.wraps(func)
        def runner(*args, **kw):
            if not kw.pop('_force', None):
                raise RuntimeError(f'{func.__name__} is a private function, use {another_func_name} instead!')
            return func(*args, **kw)
        return runner
    return be_private


class MyClass:
    @expose_as('func_b')
    def func_a(self):
        print(111)

    def func_b(self):
        return self.func_a(_force=1)


print(MyClass().func_b())  # 111
print(MyClass().func_a())  # raises RuntimeError
© www.soinside.com 2019 - 2024. All rights reserved.