📜  Python中的封装(1)

📅  最后修改于: 2023-12-03 15:04:36.225000             🧑  作者: Mango

Python中的封装

在面向对象的编程中,封装是一种将数据和代码包装为一个整体的技术。Python中也支持封装,通过使用访问权限限制符来隐藏对象的特定属性和方法。在本文中,我们将深入探讨Python中的封装,包括如何实现私有变量、保护变量和公有变量。

私有变量

私有变量是不能从对象外部访问的变量。在Python中,通过在属性名称前面加上两个下划线来实现私有变量的设置。例如:

class MyClass:
    def __init__(self):
        self.__name = 'Private'

    def __display(self):
        print('Display private variable:', self.__name)

obj = MyClass()
obj.__name  # AttributeError: 'MyClass' object has no attribute '__name'

在上面的示例中,我们创建了MyClass类,并使用__name来定义私有变量。因为这个变量是私有的,所以我们不能直接访问它。试图访问__name会导致一个AttributeError异常。

为了访问这个私有变量,我们可以提供一个公有方法。例如:

class MyClass:
    def __init__(self):
        self.__name = 'Private'

    def display(self):
        print('Display private variable:', self.__name)

obj = MyClass()
obj.display()  # Display private variable: Private

在这个新示例中,我们定义了一个公有方法display,用于访问__name私有变量。现在我们可以通过创建一个对象并调用display方法来访问这个私有变量。

保护变量

保护变量是可以从子类中访问的变量,但是不能从对象外部访问。在Python中,我们可以通过在属性名称前面加上单下划线来实现保护变量的设置。例如:

class MyClass:
    def __init__(self):
        self._name = 'Protected'

    def display(self):
        print('Display protected variable:', self._name)

class MyDerivedClass(MyClass):
    def __init__(self):
        MyClass.__init__(self)

obj = MyDerivedClass()
obj.display()  # Display protected variable: Protected

在上面的示例中,我们创建了MyClass类,并使用单下划线前缀来定义保护变量_name。我们还创建了MyDerivedClass类作为MyClass的子类,并在display方法中访问了_name变量。现在,我们可以创建一个MyDerivedClass对象,并调用display方法来访问这个保护变量。

公有变量

相反,公有变量是可以从任何地方都可以访问的变量。在Python中,我们可以通过使用没有下划线前缀的变量来定义公有变量。例如:

class MyClass:
    def __init__(self):
        self.name = 'Public'

    def display(self):
        print('Display public variable:', self.name)

obj = MyClass()
print(obj.name)  # Public
obj.display()  # Display public variable: Public

在上面的示例中,我们创建了MyClass类,并定义了name变量作为公有变量。我们还定义了一个display方法来访问name变量。现在我们可以创建一个MyClass对象,并直接访问name变量或者调用display方法来访问这个公有变量。

总结

封装是Python的一个重要功能,可以确保对象的安全性。私有变量、保护变量和公有变量可以为我们提供不同的访问权限和灵活性,以满足我们的编程需求。了解并正确使用这些访问权限限制符,可以让我们的代码更加清晰、安全和易于维护。