面向对象之封装

面向对象和封装 面向对象和封装面向对向的思想类和对象的关系类的定义对象的创建及其使用手机类练习 面向对向的思想 类和对象的关系 类的定义 对象的创建及其使用 手机类练习 阅读详情

在定义类时,在类内部函数属性和数据属性之前加’__’(两个下划线),再和以前一样去访问属性就会报错。

class Student:
    __school = '北大'

    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def __run(self):
        print('running')


student = Student('小明', 18)
print(Student.__school)
print(Student.__run)
print(student.__name)
# AttributeError: type object 'Student' has no attribute '__school'

发生了什么?我们看下__dict___

print(Student.__dict__)

{'__module__': '__main__', '_Student__school': '北大', '__init__': <function Student.__init__ at 0x0000017BE6766158>, '_Student__run': <function Student.__run at 0x0000017BE67661E0>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}

发现我们定义的__school和函数__run变成了 ‘_Student__school’, ‘_Student__run’
类中所有双下划线开头的名称如__x都会自动变形成:_类名__x的形式,其实如果非要访问是可以访问的,
那我们换个方式访问下:

print(Student._Student__school)
# 北大

print(student.__dict__)
# {'_Student__name': '小明', '_Student__age': 18}

print(student._Student__name)
# 小明

这其实是一种变形,变形后,外部无法直接访问,内部可以访问

class Student:
    __school = '北大'

    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def __run(self):
        print('running')

    def walk(self):   # 调用run
        self.__run()


student = Student('小明', 18)
student.walk()
# running 表示内部直接访问成功。

意义在于保护内部属性数据不被随意访问和更改,可以将数据隐藏起来之后,内部设置一个函数访问属性,添加条件限制,外部访问时调用此函数,必须满足条件限制。

class Student:
    __school = '北大'

    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def __run(self):
        print('running')

    def walk(self):
        self.__run()

    def tell_info(self):
        print('姓名:%s 年龄:%s' %(self.__name, self.__age))

    def set_info(self, name, age):
        if isinstance(name,str) and isinstance(age, int):
            self.__name = name
            self.__age = age
        else:
            print('数据类型错误')
s1 = Student('小明', 18)
s1.tell_info()
# 姓名:小明 年龄:18

s1.tell_info()
# 姓名:小明 年龄:18

s1.set_info('小明', 20)
s1.tell_info()
# 姓名:小明 年龄:20

另外,如果父类不想子类覆盖部分功能,可以利用隐藏将功能私有化:

class A:

    def f(self):
        print('from A')

    def test(self):
        self.f()


class B(A):
    def f(self):
        print('from B')


b = B()
b.test()

from B
class A:

    def __f(self):   # self._A__f
        print('from A')  

    def test(self):
        self.__f()  # self._A__f


class B(A):
    def __f(self):  # self._B__f
        print('from B')


b = B()
b.test()


from A
【雕爷学编程】Arduino智能家居之DS18B20温度传感器 1、温度和湿度控制:通过连接温度传感器和湿度传感器,Arduino可以实时监测室内环境的温度和湿度,并通过控制空调、加热器或加湿器等执行器,实现室内温湿度的自动调节。设计用户友好的界面和操作方式,提供简单直观的控制和反馈机制,以及考虑用户习惯和需求,能够提升系统的整体用户体验。这意味着用户可以根据自己的需求和创意,自定义和定制智能家居系统的功能和外观。5、能源管理:Arduino可以与电能监测模块和智能插座等设备结合使用,实时监测家庭能源的使用情况,并通过自动控制电器设备的开关,实现能源的有效管理和节约。 阅读详情

相关推荐

【QGIS】PyCharm集成pyqgis的processing工具箱:环境配置与初始化实战

本文详细介绍了如何在PyCharm中配置QGIS的Python环境并成功集成其强大的Processing工具箱。文章核心解决了独立环境下导入processing模块失败、算法无法调用等常见难题,通过手动添加插件路径和执行关键初始化步骤,实现了在PyCharm中丝滑调用QGIS地理处理算法,从而将复杂的空间分析流程自动化。

weixin_28831399的博客 391

面向对象编程之封装

封装(encapsulation)就是把抽象出来的数据(属性)和对数据的操作(方法)封装到一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(方法),才能对数据进行操作。

m0_75176740的博客 541

PaddleOCR实战指南:从环境搭建到自定义模型训练

本文提供了PaddleOCR从环境搭建到自定义模型训练的完整实战指南。详细介绍了使用Anaconda或Docker搭建稳定开发环境、准备与标注数据集、进行文本检测与识别模型训练的核心步骤与参数调优技巧,并分享了数据增强、模型微调及解决实际项目难题的实用方法,帮助开发者高效掌握PaddleOCR应用。

gold的博客 644

Java面向对象的三大特征-封装(超详细)

本文介绍了Java面向对象之前的类的成员之三构造器,还有面向对象基本特征之封装,最后讲了对象数组和增强for循环。

weixin_52176709的博客 1117

Mamba实战:如何用Samba框架轻松搞定RGB-D显著性检测(附避坑指南)

本文提供了基于Samba框架进行RGB-D显著性目标检测的实战指南。详细解析了从环境配置、数据预处理到模型推理与可视化的全流程,并重点剖析了多模态数据融合中的常见陷阱与调试技巧,旨在帮助开发者高效部署这一基于Mamba的先进视觉模型,规避工程实践中的典型问题。

dapp9builder的博客 615

Discuz IIS上传附件大于28M失败报错Upload Failed.修改maxAllowedContentLength(图文教程)

下图:Discuz X3.5的系统信息,上传许可为1024MB(1GB)论坛为局域网论坛,仅供内部同事交流使用!使用官方最新的Discuz! X3.5 Release 20231221 UTF-8 下图:选择上传附件(提示可以最大上传100M) 下图:模拟上传84M的文件(

骚团长的博客 1828

面向对象 04:三大特性之——封装,封装的含义和作用,以及在 Java 中的使用方式,附完整的测试案例代码

本文讲述面向对象编程的三大特性之——封装。通过案例分析,简单介绍了封装的含义和作用,以及在 Java 中如何使用封装。

积累,沉淀,温故而知新 1602

【数据集】GPM IMERG Daily Precipitation Dataset

GPM IMERG Daily Precipitation Dataset

WW、forever的博客 1219

面向对象--封装

数据隐藏通常指的就是封装。封装是 Java 面向对象的特点的表现,封装是一种信息隐蔽技术。也就是说,如果我们使用了封装技术的话,别人就只能用我们做出来的东西而看不见我们做的这个东西的内部结构了。2、import关键字:是用来引用包的,我们的类或者Java的开发类,都存放在不同包下,当我们要是用这个类时,就需要将这个类引入,使用import关键字进行引用。所谓的封装,其实很好理解,就是将代码通过包装的方式存放起来。既然是通过包装的方式,那么我们可以理解为将代码存放在一个容器当中,这个容器,我们称之为包。...

简之恨寒的博客 1351

YOLO11涨点优化:原创自研 | 魔改Bottleneck,具备多尺度和特征通道融合的结构

可以将C3k2_MSAMCS放在neck,或者backbone和neck同时修改,具体看自己数据集的涨点情况决定

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1651

华为od 面试八股文_C++_01_含答案

华为od 面试八股文_C++_01_含答案

MISAYAONE的博客 5592

面向对象——封装

1、封装:隐藏事物的属性和实现细节,对外提供公共的访问方式。2、隐藏了事物的实现细节提高了代码的复用性提高了安全性3、隐藏事物的属性隐藏事物的实现细节对外提供公共的访问方式1、构造方法:构造函数,构造器,Constructor2、作用:用于给对象中的成员变量赋值。在创建对象的同时,会自动调用构造方法,等对象创建完成的时候,对象中的成员变量就已经有指定的值了。修饰符 方法名称(参数列表) {方法体 }1 、构造方法的方法名称,必须和类名一模一样,连大小写都一样。

venus_patton的博客 1966

kaggle学习笔记-餐厅数据挖掘

分析Zomato数据集的基本思想是为了公平地了解影响在班加罗尔不同地方建立不同类型餐厅的因素,每个餐厅的总评级,班加罗尔是这样一个城市,拥有超过12,000家餐厅,餐厅供应来自世界各地的菜肴。每天都有新的餐馆开业,这个行业还没有饱和,需求也在与日俱增。然而,尽管需求不断增加,新餐馆却很难与老牌餐馆竞争。大多数餐厅都供应同样的食物。班加罗尔是印度的IT之都。这里的大多数人主要依靠餐馆的食物,因为他们没有时间自己做饭。由于对餐馆的需求如此巨大,因此研究一个地方的人口统计学就变得很重要。

优快云XXCQ的博客 1862

面向对象封装案例

在定义属性时,如果不知道设置什么初始值,可以设置为。

qq_44729609的博客 904

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

面向对象———封装

封装 ​ 封装是面向对象的三大特征之一,它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。 封装可以实现以下目的: 1、 隐藏类的实现细节 2、 使用者只能通过提供的方法来访问数据,从而可以在方法中加入控制逻辑,限制对变量的不合理的 访问。 3、 可进行数据检查,从而有利于保证对象信息的完整性。 4、 便于修改,提高代码的可维护性。 封装的实际含义就是该隐藏的隐藏,该暴漏的暴漏。 定义类 [修饰符] class 类名

grape2001的博客 2867

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

面向对象封装

面向对象封装应用 这里通过封装构造成页面的搜索条件 """ 面向对象封装的特点是:职责划分,封装什么就处理什么,然后给其他的类使用 FilterOption类中封装的是具体的处理功能,FilterList类中传入参数option,和data_list, option:实例化对象的时候,传入的参数是FilterOption实例化的对象,就是FilterList可以调用FilterOptio...

dianyi3179的博客 220

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

面向对象的封装

文章目录前言一、封装是什么?二、封装的概念三、封装的实例讲解总结 前言 封装是将一些基本的数据类型复合成一个自定义的类型,本文从数据角度和行为角度简单介绍下面向对象的封装。 一、封装是什么? 面向对象有三大特征,分别是封装,继承,多态。封装是将一些基本的数据类型复合成一个自定义的类型。 二、封装的概念 1、封装 1、数据角度 概念: 将一些基本的数据类型复合成一个自定义的类型 优点: 1、建立数据与对象之间的关联 2、代码可读性强 2、行为角度 定义: 类外提供必

luomoxiaoyaoke的博客 3480

面向对象的封装、java封装

面向对象的封装封装目的及概念使用方法及适用场景 封装 目的及概念 概念: 在电子方面,封装是指把硅片上的电路管脚,用导线接引到外部接头处,以便与其它期间连接。 在面向对象编程中,封装(encapsulation)是将对象运行所需的资源封装在程序对象中——基本上,这个资源就是方法和数据。对象公布其接口,类似“外部接头处”,对象接口包括了公共的方法和初始化数据。其他连接到这个接口上的对象不需要关心其实现的方法就可以直接使用这个对象。“不用告诉我你是怎么做的,只要做就行” 封装就是将抽象得到的数据和行为(或

qiugengjun的博客 212

面向对象——————封装

在面向对象程式设计方法中,封装(英语Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。...

lhjava1234的博客 1546

Python中什么是面向对象-封装

文字有点长,对于不想看文字的朋友,可以去这里看视频,内容和这个文字一样的,视频可能更好理解 www.piqizhu.com/v/yjBderO02… 回顾面向过程 前面我们已经学过了 面向过程 我们知道,面向过程 的时候,我们的关注点是 步骤 面向过程做事,就是把 一件事情 分割为多个步骤, 然后依次去完成每一个步骤 这样做事可以让我们的事情变的很明朗,不会弄乱 那么, 既然有了面向过程,为...

weixin_34361881的博客 265

C#面向对象封装

一、什么叫做面向对象封装? 封装的概念:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。 二、面向对象封装有什么好处(为什么要封装)? 封装的目的:是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。 三、如何使用面向对象封装? 1、属性器 2、实例与静态方法 3、构造函数 4、重载 5、...

♂戏子无情♂的博客 381

面向对象以及封装

封装原则 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 成员变量private,提供对应的getXxx()/setXxx()方法。封装概述: 是面向对象三大特征之一(封装,继承,多态) 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的。面向对象: 当需要实现一个功能的时候,不关心具体的步骤,而是找一个具有该功能的人,来帮我做事儿。通常情况下,一个类并不能直接使用,需要根据类创建一个对象,才能使用。

VickyGod的博客 126

面向对象三大特性——封装

面向对象——封装 1、面向对象 (1)什么是面向对象?: 面向对象是一种编程思想 通俗的说:面向对象是一种思考问题的思维方式 (2)为什么使用面向对象以及它的作用 计算机语言为了更好的去描述现实生活中的事物,按照生活中的思考方式来定义,这样我们使用起来会更加方便 作用:将功能封装到对象里,强调的是具备某功能的对象; (3)面向对象的三个特征: 1.封装(Encapsulation) 2....

weixin_44008460的博客 349
上一篇: 面向对象之多态
下一篇: 装饰方法@property
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值