有没有办法禁用 python class 中的某些功能,以便只能在其 class 中使用它才能使用它?

Is there a way to disable some function in python class so that it cannot be used except using it in inside its class?

例如我有 myClassFile.py 文件,代码如下:

class myClass:

    def first(self):
        return 'tea'

    def second(self):
        print(f'drink {self.first()}')

然后我有 run.py 文件,代码如下:

from myClassFile import myClass

class_ = myClass()
class_.second()

当我运行会输出

>>> 'drink tea'

如何防止有人在 run.py 文件或 myClass 之外编写以下代码?

class_.first()

因此,如果他们在 myClass class 之外使用该方法,那将是一个错误或某种错误

Python 不支持这些。您可以通过在它们前面加上 _ 来将它们标记为私有,或者通过在它们前面加上 __.

来更难调用它们

这些被称为私有方法。要在 python 中创建私有变量或方法,只需在其前面加上 __,这样 def second(self) 就会变成 def __second(self).

这也适用于变量和函数式编程变量!

class Test:  
    def test(self):
        self.__test()
        
    def __test(self):  
        print('_test')
        
        
x = Test()
x.__test()

报错,但x.test()打印_test成功!

请注意,这仍然可以通过使用 x.__Test__test()

运行

您可以通过在方法和属性前加上 __ 前缀来为它们添加一定程度的保护。

但是你不能让它们完全私有(据我所知),总有办法解决,如下例所示。

class MyClass:
    def __init__(self):
        self.__a = 1

    def __method(self):
        return 2


obj = MyClass()

# obj.__a  # raise an exception
# obj.__method() # raise an exception
print(dir(obj)) # you can see the method and attributes have been renamed !
print(obj._MyClass__a) # 1
print(obj._MyClass__method()) # 2