📅  最后修改于: 2023-12-03 14:50:36.905000             🧑  作者: Mango
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.
但是,开发人员通常不鼓励这种方式。因为这会使代码不易阅读,也难以维护。
将受保护的和私有的成员定义为类的对象属性,避免直接访问受保护的和私有的成员属性,是更好的编程实践,这样可以增加代码的可读性和可维护性。