在Python中的封装

在Python中的封装

封装是面向对象编程(OOP)中最基本的概念之一。它是将处理数据的数据和方法封装在一个单元中的概念。这样可以通过限制对变量和方法的访问来防止数据的意外修改。对象的方法可以更改变量的值以防止意外更改。这些变量被称为私有变量。

封装是通过封装所有数据(如成员函数、变量等)的类来演示的。

看一个实际的封装示例。一个公司有许多部门,例如财务部和销售部。财务部负责管理所有财务交易并跟踪所有数据。销售部也负责处理所有与销售相关的活动。他们记录了所有销售记录。有时,财务部门的人员可能需要某个特定月份的所有销售数据。在这种情况下,他无权访问销售部门的数据。首先,他需要联系销售部门的另一个工作人员请求数据。这就是封装。销售部门的数据以及能够操作该数据的员工都被统称为“销售部门”。封装是隐藏数据的另一种方式。这个示例显示了销售、财务和账户等部门的数据对其他部门都是隐藏的。

保护成员

C++和Java中的保护成员是类的成员,只能在类内部访问,而不能被外部任何人访问。在Python中,可以通过遵循约定并在名称前面加上一个下划线来实现。

保护变量可以从类和派生类中访问(它也可以在派生类中进行修改),但通常不会在类体外部访问它。

__init__ 方法是构造函数,当实例化某个类型的对象时会运行。

示例:

# Python program for demonstrating protected members

# first, we will create the base class
class Base1:
    def __init__(self):

        # the protected member
        self._p = 78

# here, we will create the derived class
class Derived1(Base):
    def __init__(self):

# now, we will call the constructor of Base class
        Base1.__init__(self)
        print ("We will call the protected member of base class: ",
            self._p)

# Now, we will be modifing the protected variable:
        self._p = 433
        print ("we will call the modified protected member outside the class: ",
            self._p)


obj_1 = Derived1()

obj_2 = Base1()

# here, we will call the protected member
# this can be accessed but it should not be done because of convention
print ("Access the protected member of obj_1: ", obj_1._p)

# here, we will access the protected variable outside
print ("Access the protected member of obj_2: ", obj_2._p)

输出:

We will call the protected member of base class:  78
we will call the modified protected member outside the class:  433
Access the protected member of obj_1:  433
Access the protected member of obj_2:  78

私有成员

私有成员与受保护成员相同。不同之处在于,被声明为私有的类成员不应该被类外部或任何基类访问。Python没有私有实例变量可以在类外部被访问。

但是,要定义一个私有成员,需要在成员的名称前加上双下划线 “__”

Python的私有和安全成员可以使用Python名称混淆从类外进行访问。

示例如下:

class Base1:
    def __init__(self):
          self.p = "Javatpoint"
          self.__q = "Javatpoint"

# Creating a derived class
class Derived1(Base1):
      def __init__(self):

# Calling constructor of
# Base class
     Base1.__init__(self)
     print("We will call the private member of base class: ")
     print(self.__q)


# Driver code
obj_1 = Base1()
print(obj_1.p)

输出:

Javatpoint

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程