【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )

文章目录

  • 一、访问私有成员
    • 1、对象无法访问私有变量
    • 2、对象无法访问私有方法
    • 3、类内部访问私有成员





一、访问私有成员




1、对象无法访问私有变量


在下面的 Python 类 Student 中 , 定义了私有的成员变量 ,

    # 定义私有成员__address = None

该私有成员变量 , 只能在类内部进行访问 , 类的外部无法进行访问 ;

在 类外部 创建的 Student 实例对象 , 是无法访问 __address 私有成员的 ;

使用 实例对象 访问 类的私有成员 , 编译时不会报错 , 但是运行时会报错

AttributeError: 'Student' object has no attribute '__address'. Did you mean: 'address'?

最后一行代码

print(s1.__address)

访问 s1 实例对象 的 __address 成员 , 会报如下错误 ;

在这里插入图片描述


代码示例 :

"""
面向对象 - 封装
"""# 定义 Python 类
class Student:name = Noneage = Nonedef say(self):print(f"{self.name} is {self.age} years old")# 定义私有成员__address = None# 定义私有成员方法def __say(self):print(f"地址是 {self.__address}")def __init__(self, name, age, address):self.name = nameself.age = ageself.address = address# 创建对象
s1 = Student("Tom", 18, "学院路6号")
print(s1.name)
print(s1.age)
print(s1.__address)

执行结果 :

Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
Traceback (most recent call last):File "Y:\002_WorkSpace\PycharmProjects\HelloPython\hello.py", line 31, in <module>print(s1.__address)
AttributeError: 'Student' object has no attribute '__address'. Did you mean: 'address'?
Tom
18Process finished with exit code 1

在这里插入图片描述


2、对象无法访问私有方法


在类中 定义私有成员方法

    # 定义私有成员方法def __say(self):print(f"地址是 {self.__address}")

创建对象 , 调用该私有成员方法 ,

# 创建对象
s1 = Student("Tom", 18, "学院路6号")
s1.__say()

报如下错误 :

AttributeError: 'Student' object has no attribute '__say'

代码示例 :

"""
面向对象 - 封装
"""# 定义 Python 类
class Student:name = Noneage = Nonedef say(self):print(f"{self.name} is {self.age} years old")# 定义私有成员__address = None# 定义私有成员方法def __say(self):print(f"地址是 {self.__address}")def __init__(self, name, age, address):self.name = nameself.age = ageself.address = address# 创建对象
s1 = Student("Tom", 18, "学院路6号")
print(s1.name)
print(s1.age)
s1.__say()

执行结果 :

Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
Tom
18
Traceback (most recent call last):File "Y:\002_WorkSpace\PycharmProjects\HelloPython\hello.py", line 31, in <module>s1.__say()
AttributeError: 'Student' object has no attribute '__say'Process finished with exit code 1

在这里插入图片描述


3、类内部访问私有成员


在 Student 类中 , 定义了 私有成员变量 和 私有成员方法 :

    # 定义私有成员__address = None# 定义私有成员方法def __say(self):print(f"address is {self.__address}")

并且在 say 成员方法 中 , 调用了 上述 私有的 成员变量 和 成员方法 :

    def say(self):print(f"{self.name} is {self.age} years old , address is {self.__address}")self.__say()

最终的执行结果为 :

Tom is 18 years old , address is 学院路6号
address is 学院路6

完整代码示例 :

"""
面向对象 - 封装
"""# 定义 Python 类
class Student:name = Noneage = Nonedef say(self):print(f"{self.name} is {self.age} years old , address is {self.__address}")self.__say()# 定义私有成员__address = None# 定义私有成员方法def __say(self):print(f"address is {self.__address}")def __init__(self, name, age, address):self.name = nameself.age = ageself.__address = address# 创建对象
s1 = Student("Tom", 18, "学院路6号")
print(s1.name)
print(s1.age)
s1.say()

执行结果 :

Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
Tom
18
Tom is 18 years old , address is 学院路6号
address is 学院路6号Process finished with exit code 0

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15285.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

depot_tools问题记录 - 执行fetch/gclient命令无响应

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 在研究将Dart dill文件序列化为可读文本时遇到的问题。 开发环境 macOS: 13.4 问题描述 之前使用depot_tools中的fetch/gclient命令还是正常的&#xff0c;今天想实测--no-history参数时突然遇到命令无响应的情况…

在 FPGA 上通过 2D CNN 进行高效视频理解的 TSM 网络

在这个项目中&#xff0c;将在线和离线 TSM 网络部署到 FPGA&#xff0c;通过 2D CNN 执行视频理解任务。 介绍 在这个项目中&#xff0c;展示了 Temporal-Shift-Module ( https://hanlab.mit.edu/projects/tsm/)在 FPGA 上解决视频理解问题的实用性和性能。 TSM 是一种网络结构…

Docker快速部署Hadoop环境

Docker安装部署Hadoop环境&#xff0c;通过三个容器来模拟三个节点&#xff0c;最后只保留Master节点实现搭建。 安装环境 Ubuntu 22.04.1 LTS 和Docker 23.0.1 安装过程 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/hadoop_test/hadoop_base在Docker中创建网…

十三、Docker Compose使用和主要功能

学习参考&#xff1a;尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 一、核心概念二、主要功能二、docker compose常用命令三、docker compose 案例3.1 自己写一个微服务模块3.2 用Dockerfile将上面的模块编排(不使用compose)3.3 使用compose编…

Go语言-数组和切片有什么异同?

slice 的底层数据是数组&#xff0c;slice 是对数组的封装&#xff0c;它描述一个数组的片段。两者都可以通过下标来访问单个元素。 数组是定长的&#xff0c;长度定义好之后&#xff0c;不能再更改。在 Go 中&#xff0c;数组是不常见的&#xff0c;因为其长度是类型的一部分…

【开源软件治理】MITRE : 开源软件

定义&#xff1a; 开源软件&#xff08;OSS&#xff09;是一种商业软件&#xff0c;只需同意遵守附带的 OSS 许可证即可获得全部所有权&#xff0c;无需立即进行第三方验证。同意 OSS 许可证允许个人、公司或政府实体根据需要尽可能频繁和广泛地复制、分发和运行 OSS 应用程序&…

现代C++新特性 扩展的聚合类型(C++17 C++20)(PC浏览效果更佳)

文字版PDF文档链接&#xff1a;现代C新特性(文字版)-C文档类资源-CSDN下载 1.聚合类型的新定义 C17标准对聚合类型的定义做出了大幅修改&#xff0c;即从基类公开且非虚继承的类也可能是一个聚合。同时聚合类型还需要满足常规条件。 1&#xff0e;没有用户提供的构造函数。…

Django_模型类详解(七)

目录 一、定义属性 字段类型 选项 二、查询集 两大特性 查询集的缓存 限制查询集 三、条件查询 条件运算符 1) 查询相等 2) 模糊查询 3) 空查询 4) 范围查询 5) 比较查询 6) 日期查询 F对象 Q对象 聚合函数 四、关联查询 通过对象执行关联查询 通过模型类执…

Squid 缓存代理(一)---原理及搭建(传统代理、透明代理)

前言 Squid 是 Linux 系 统 中 最 常 用 的 一 款 开 源 代 理 服 务 软 件 &#xff08; 官 方 网 站 为 http://www.squid-cache.org&#xff09;&#xff0c;可以很好地实现 HTTP 和 FTP&#xff0c;以及 DNS 查询、SSL 等应用的缓存代理。缓存代理作为应用层的代理服务软件…

Python学习笔记-基于socket基础的http服务端程序

通过HTTP协议可以进行通信可以规范化的进行网络间通信。下面技术第一个http服务器小程序。简单的记录第一个试手程序。 1.http通信的基本流程 整个流程对应四层网络架构&#xff1a;应用层、传输层、网络层、链路层。有的部分已经封装&#xff0c;不需要我们再行处理。 2.服务…

SAR ADC version2 ——ADC背景介绍

目录&#xff1a; ADC常用指标分类 静态性能&#xff1a;微分非线性&#xff1a;DNL 积分非线性&#xff1a;INL 仿真测试DNL&#xff1a;&#xff08;码密度法&#xff09;&#xff08;code density&…

1.Git使用技巧-常用命令1

Git使用技巧-常用命令 文章目录 Git使用技巧-常用命令一、git 创建仓库demo 二、本地仓库常用命令提交详解git commitgit commit --amend 三、 推送到远程分支git push 总结参考 一、git 创建仓库 创建远端仓库&#xff1a; git init – bare // 创建远端裸仓库&#xff1b; 远…