0

例如,我有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类之外使用该方法,那将是一个错误或某种错误

4

2 回答 2

3

您可以通过在方法和属性前面加上__.

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

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
于 2022-01-10T17:27:18.230 回答
-1

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()

于 2022-01-10T17:22:19.807 回答