📜  Python中的面向对象编程| Set 2(数据隐藏和对象打印)(1)

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

Python中的面向对象编程 - Set 2(数据隐藏和对象打印)

在Python中,面向对象编程中的两个重要概念是数据隐藏和对象打印。本篇文章将对这两个概念进行详细介绍,包括它们的定义、如何实现、以及为什么它们是重要的。

数据隐藏

数据隐藏是指将对象的数据成员隐藏在其内部,这样它们只能通过特定的方法访问。这种隐藏的数据成员被称为私有成员。

在Python中,通过在变量名前面添加两个下划线“__”来定义私有成员。例如:

class MyClass:
    def __init__(self, x, y):
        self.__x = x
        self.__y = y

在这个例子中,变量x和y是私有成员,它们只能通过类内部的方法访问。这可以通过定义getter和setter方法来实现:

class MyClass:
    def __init__(self, x, y):
        self.__x = x
        self.__y = y

    def get_x(self):
        return self.__x

    def set_x(self, x):
        self.__x = x

    def get_y(self):
        return self.__y

    def set_y(self, y):
        self.__y = y

这样,我们就能够安全地访问和修改对象的私有成员,例如:

obj = MyClass(1, 2)
print(obj.get_x())    # Output: 1

obj.set_y(3)
print(obj.get_y())    # Output: 3

值得注意的是,Python并不真正地将私有成员隐藏起来,我们还是可以通过对象的"___"形式的名称来访问和修改它们:

obj = MyClass(1, 2)
print(obj._MyClass__x)    # Output: 1

obj._MyClass__y = 4
print(obj.get_y())        # Output: 4

尽管这样做不符合Python的惯用法,但在某些情况下仍然非常有用。

对象打印

当我们打印一个对象时,通常会得到一些无用的信息,例如对象的类型和内存地址。对于一个自定义的对象而言,我们可能更希望打印它的实际属性。

在Python中,通过覆盖对象的__str__()方法来实现对象的自定义打印。例如:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return "x = " + str(self.x) + ", y = " + str(self.y)

在这个例子中,我们定义了一个Point类,包含两个属性x和y。我们通过覆盖__str__()方法来将它打印成" x = , y = "的形式。例如:

p = Point(1, 2)
print(p)    # Output: x = 1, y = 2

通过这种方式,我们就能够方便地打印自定义的对象,并且在调试时也非常有用。