如何在只能从__init__方法调用的类中定义方法

时间:2020-05-14 19:55:46

标签: python python-3.x class methods

我有一个简单的Python类,带有构造函数和方法。我希望只能从构造函数中调用该方法,而不能在类定义之外调用。有什么办法可以在Python中做到这一点?我知道我可以通过在构造函数中定义一个函数来做到这一点,但是我不想这样做。

class Test:
    def __init__(self):
        self.do_something  # Should work

    def do_something(self):
        # do something

test = Test()
test.do_something()  # Should not work (Should not be a recognized method)

3 个答案:

答案 0 :(得分:2)

您需要在do_something(self)前面加上双下划线。代码如下。

class Test:
    def __init__(self):
        self.__do_something  # Should work

    def __do_something(self):
        # do something

test = Test()
test.__do_something()

答案 1 :(得分:2)

是的,您可以使用双下划线前缀标记方法:

class Test:
    def __init__(self):
        self.__do_something()  # This works

    def __do_something(self):
        print('something')

test = Test()
test.__do_something()  # This does not work

输出:

something
Traceback (most recent call last):

  File "something.py", line 11, in <module>
    test.__do_something()  # This does not work
AttributeError: 'Test' object has no attribute '__do_something'

答案 2 :(得分:1)

要使其在python中成为“私有”,只需在其名称前加上__。不过,它并不是真正的私人。只是名字略有不同。您仍然可以通过在类中的对象上运行dir来访问它,一旦知道名称,就可以使用它在类外调用它。