简单介绍python封装的基本知识

当我们尝试设计一个类时,我们需要考虑到类的封装性。在Python中,类的封装性可以通过访问修饰符来强制体现。访问修饰符包括public、protected和private,用来约束类中的属性和方法的访问范围。

public属性和方法

在Python中,所有没有在属性和方法名前加上双下划线的属性和方法都是公有的,也就是说,它们可以在类的外部被访问。例如,我们定义了一个Person类:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print("Hello, my name is", self.name, "and I am", self.age, "years old.")

在这个类中,我们定义了一个构造函数__init__和一个方法say_hello,它们都没有使用访问修饰符。因此,它们都是公有的。我们可以在类的外部创建一个Person对象并调用这个方法:

person = Person("Alice", 20)
person.say_hello()  # 输出: Hello, my name is Alice and I am 20 years old.

protected属性和方法

在Python中,如果我们需要将属性或方法限制为受保护的,可以在属性和方法名前加上一个下划线。这种受保护的属性或方法可以在类的内部和子类中被访问,但是不能在类的外部被访问。例如,我们可以将上面的Person类中的name属性改为受保护的:

class Person:
    def __init__(self, name, age):
        self._name = name
        self.age = age

    def say_hello(self):
        print("Hello, my name is", self._name, "and I am", self.age, "years old.")

现在name属性是受保护的,我们不能在类的外部直接访问它,但是在类的内部和子类中可以访问:

person = Person("Alice", 20)
print(person._name)  # 输出: Alice

private属性和方法

在Python中,如果我们需要将属性或方法限制为私有的,可以在属性和方法名前加上两个下划线。这种私有的属性或方法只能在类的内部被访问,无法在子类和类的外部被访问。例如,我们可以将上面的Person类中的age属性改为私有的:

class Person:
    def __init__(self, name, age):
        self._name = name
        self.__age = age

    def say_hello(self):
        print("Hello, my name is", self._name, "and I am", self.__age, "years old.")

现在age属性是私有的,我们不能在类的外部直接访问它,甚至不能在类的内部使用属性名直接访问,但是可以通过属性的getter和setter方法访问:

person = Person("Alice", 20)
print(person._Person__age)  # 报错: 'Person' object has no attribute '__age'
print(person.__age)  # 报错: 'Person' object has no attribute '__age'
print(person.say_hello())  # 输出: Hello, my name is Alice and I am 20 years old.

另外,我们可以在类中定义getter和setter方法,以便在类的外部对私有属性进行访问和修改:

class Person:
    def __init__(self, name, age):
        self._name = name
        self.__age = age

    def say_hello(self):
        print("Hello, my name is", self._name, "and I am", self.__age, "years old.")

    def get_age(self):
        return self.__age

    def set_age(self, age):
        if isinstance(age, int) and age > 0 and age < 150:
            self.__age = age
        else:
            print("Invalid age!")

现在我们可以通过getter和setter方法访问和修改私有属性age

person = Person("Alice", 20)
print(person.get_age())  # 输出: 20
person.set_age(30)
print(person.get_age())  # 输出: 30
person.set_age(200)  # 输出: Invalid age!

以上就是Python封装的基本知识,实际应用中我们应该根据具体情况进行访问修饰符的选择和使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简单介绍python封装的基本知识 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 如何安装windows7旗舰版

    如何安装Windows 7旗舰版 Windows 7旗舰版是一款流行的Windows操作系统版本,本文将介绍如何安装Windows 7旗舰版。在进行本操作前,请确保你拥有Windows 7旗舰版的安装光盘或下载好的镜像文件。 步骤一:备份数据 在进行Windows 7旗舰版的安装之前,我们建议你先备份重要数据。因为安装Windows将格式化系统磁盘,导致其中…

    其他 2023年3月28日
    00
  • 连接上192.168.1.1没有账号、密码输入框的解决方法

    下面我将为您详细讲解“连接上192.168.1.1没有账号、密码输入框的解决方法”的完整攻略。 一、问题描述 在连接到路由器管理页面时,有时会出现没有账号、密码输入框的情况,使得用户无法登录和管理路由器设置。 二、解决方法 出现这种情况,一般是由于缓存或Cookie等原因造成的,以下是三种比较常见的解决方法: 1.清理缓存 在浏览器中按下Ctrl + Shi…

    other 2023年6月27日
    00
  • Android控件之RatingBar自定义星级评分样式

    Android控件之RatingBar自定义星级评分样式攻略 RatingBar是Android中常用的评分控件,它可以让用户通过点击星星来进行评分。在本攻略中,我们将学习如何自定义RatingBar的样式,以满足特定的设计需求。 步骤一:创建自定义样式 首先,我们需要创建一个自定义的样式来定义RatingBar的外观。在res/values/styles.…

    other 2023年8月26日
    00
  • Go语言中的Array、Slice、Map和Set使用详解

    下面是对“Go语言中的Array、Slice、Map和Set使用详解”的完整攻略。 1. Array 1.1 简介 在Go语言中,数组是一种固定大小的数据结构,表示相同类型的元素的有序集合。 数组的定义方式为: var arr [n]type 其中,n表示数组的大小,type表示数组中元素的类型。 1.2 示例 下面是一个将数组进行遍历的示例: packag…

    other 2023年6月20日
    00
  • JavaScript中 创建动态 QML 对象的方法

    以下是使用标准的Markdown格式文本,详细讲解JavaScript中创建动态QML对象的方法的完整攻略: JavaScript中创建动态QML对象的方法 在JavaScript中,可以使用Qt的QML语言来创建动态对象。下面是两种常用的方法: 方法一:使用Qt.createQmlObject函数 可以使用Qt的createQmlObject函数来动态创建…

    other 2023年10月14日
    00
  • ListCtrl接受拖动文件

    在Web开发中,有时需要实现拖拽文件上传的功能。本文将详细讲解如何使用ListCtrl接受拖动文件,并提供两个示例说明。 方法一:使用HTML5的拖放API HTML5的拖放API提供了一种简单的方法来实现拖拽文件上传的功能。下面是一个使用HTML5的拖放API的示例: <!DOCTYPE html> <html> <head&…

    other 2023年5月5日
    00
  • 将数据导入hive,将数据从hive导出

    将数据导入Hive,将数据从Hive导出的完整攻略 Hive是一个基于Hadoop的数据仓库工具,它可以将结构化数据映射到Hadoop的分布式文件系统上,并提供类SQL查询功能。本文将为您提供一份详细的将数据导入Hive,将数据从Hive导出的完整攻略,包括数据导入和导出的基本概念、使用方法和两个示例说明。 数据导入的基本概念 在Hive中,数据导入是指将数…

    other 2023年5月5日
    00
  • android安卓4.4.4固件官方下载 安卓4.4.4下载地址曝光

    Android安卓4.4.4固件官方下载攻略 1. 确认设备兼容性 在开始下载安卓4.4.4固件之前,首先需要确认您的设备是否兼容该版本的安卓系统。请查阅设备的官方文档或联系设备制造商以获取相关信息。 2. 寻找官方下载渠道 为了确保下载的固件是官方版本,我们建议您从官方渠道下载。以下是一些常见的官方下载渠道: 设备制造商官方网站:许多设备制造商会在其官方网…

    other 2023年8月4日
    00
合作推广
合作推广
分享本页
返回顶部