📜  受保护的与私有的python(1)

📅  最后修改于: 2023-12-03 14:50:36.905000             🧑  作者: Mango

受保护的与私有的Python

Python是一门面向对象的编程语言,其中有两种访问控制限制:受保护的和私有的。

受保护的访问控制

受保护的访问控制使用单下划线(_)定义,表示该变量或方法不应该被导入或者直接访问。

class MyProtectedClass:
    def __init__(self):
        self._protected_variable = "Hello, World!"

    def _protected_method(self):
        print("This is a protected method.")

obj = MyProtectedClass()
print(obj._protected_variable)     # Output: Hello, World!
obj._protected_method()            # Output: This is a protected method.

在Python中,受保护的变量和方法仍然可以被直接访问,但这通常被认为是糟糕的编程习惯。因此,开发人员应该避免直接访问受保护的变量和方法。

私有的访问控制

私有的访问控制使用双下划线(__)定义,表示该变量或方法不能被导入或者直接访问。

class MyPrivateClass:
    def __init__(self):
        self.__private_variable = "Hello, World!"

    def __private_method(self):
        print("This is a private method.")

obj = MyPrivateClass()

try:
    print(obj.__private_variable)
except AttributeError as e:
    print(e)         # Output: 'MyPrivateClass' object has no attribute '__private_variable'

try:
    obj.__private_method()
except AttributeError as e:
    print(e)         # Output: 'MyPrivateClass' object has no attribute '__private_method'

在Python中,私有变量和方法不能被直接访问。但是,使用“_类名__变量名”或“_类名__方法名”可以访问这些私有成员。

class MyPrivateClass:
    def __init__(self):
        self.__private_variable = "Hello, World!"

    def __private_method(self):
        print("This is a private method.")

obj = MyPrivateClass()

print(obj._MyPrivateClass__private_variable)   # Output: Hello, World!
obj._MyPrivateClass__private_method()          # Output: This is a private method.

但是,开发人员通常不鼓励这种方式。因为这会使代码不易阅读,也难以维护。

将受保护的和私有的成员定义为类的对象属性,避免直接访问受保护的和私有的成员属性,是更好的编程实践,这样可以增加代码的可读性和可维护性。