Python进阶-07-封装性

C#面向对象编程-—封装性 封装性、标准属性、自动属性 阅读详情

来源:《Python从小白到大牛》关东升

1、封装性

封装性是面向对象的三大特征之一,Python语言没有与封装性相关的关键字,它通过特定的名称实现对变量和方法的封装。

1.1私有变量

默认情况下Python中的变量是公有的,可以在类的外部访问他们。如果想让他们成为私有变量,可以在变量前加上双下划线“__”。

    class Animal(object):
        """定义动物类"""

         def _inti_(self,age,sex=1,weight=0.0):
            self.age=age              # 定义年龄实例变量
            self.sex=sex              # 定义性别实例变量
            self.__weight=weight      # 定义体重实例变量

         def eat(self):
            self.__weight+=0.01
            print('eat...')

         def run(self):
            self.__weight-=0.01
            print('run...')

    a1=Animal(2,0,10.0)

    print('a1体重:{0:0.2f}'.format(a1.weight))
    a1.eat()
    a1.run()

运行结果:Traceback(most recent call last):...
        AttributeError:'Animal' object has no attribute 'weight'

上述内容中self.__weight=weight,weight前面加了双下画线,这会定义私有变量__weight。__weight变量在类内部访问没有问题,但是如果在外部访问则会发生错误。

    提示:Python中并没有演的意义上的封装,所谓的私有变量只是形式上的限值,如果想在类的外部访问这些私有变量也是可以的,这些双下画线"__"开头的私有变量其实只是换了一个名字,他们的命名规律为“__类名__变量”,所以将上述代码al.weight改成al._Animal_weight就可以访问了,但这种访问方式并不符合规范,会破坏封装。可见Python的封装性靠的是程序员的自律,而非强制性的语法。

1.2私有方法

私有方法与私有变量的封装是类似的,只要在方法前加上双下画线“__”就是私有方法了。

    class Animal(object):
        """定义动物类"""

         def _inti_(self,age,sex=1,weight=0.0):
            self.age=age              # 定义年龄实例变量
            self.sex=sex              # 定义性别实例变量
            self.__weight=weight      # 定义体重实例变量

         def eat(self):
            self.__weight+=0.01
            self._run()
            print('eat...')

         def _run(self):
            self.__weight-=0.01
            print('run...')

    a1=Animal(2,0,10.0)
    a1.eat()
    a1.run()
运行结果为:
    eat...
    Traceback(most recent call last):...
    AttributeError:'Animal' object has no attribute 'run'

上述代码中__run()方法是私有方法,__run()方法可以在类的内部访问,不能在类的外部访问,否则会发生错误。

    提示:如果一定要在类的外部访问私有方法也是可疑的。与私有变量访问类似,命名规律为“__类名__方法”。这也是不符合规范,也会破坏封装。

1.3定义属性

封装通常是对成员进行的封装。在严格意义上的面向对象设计中,一个类是不应该有公有的实例成员变量的,这些实例成员变量应该被设计为私有的,然后通过公有的setter和getter访问器访问。

    class Animal(object):
        """定义动物类"""

         def _inti_(self,age,sex=1,weight=0.0):
            self.age=age              # 定义年龄实例变量
            self.sex=sex              # 定义性别实例变量
            self.__weight=weight      # 定义体重实例变量

         def set_weight(self,weight):
            self.__weight=weight

         def get_weight(self):
            return self.__weight

    a1=Animal(2,0,10.0)
    print('a1体重:{0:0.2f}'.format(a1.get_weight()))    # 10.00
    a1.set_weight(123.45)
    print('a1体重:{0:0.2f}'.format(a1.get_weight()))    # 123.45

上述set_weight()方法是setter访问器,他有一个参数,用来替换现有成员变量。get_weight方法是getter访问器。
访问器形式的封装需要一个私有便令,需要提供getter访问器和一个setter访问器,只读变量不用提供setter访问器。总之,访问器形式的封装在编写代码时比较麻烦。为了解决这个问题,Python中提供了属性(property),定义属性可以使用@property和@属性名.setter装饰器,@property用来装饰getter访问器,@属性名.setter用来装饰setter访问器。

    class Animal(object):
        """定义动物类"""

         def _inti_(self,age,sex=1,weight=0.0):
            self.age=age              # 定义年龄实例变量
            self.sex=sex              # 定义性别实例变量
            self.__weight=weight      # 定义体重实例变量

         @property
         def weight(self):            # 替代get_weight(self):
            return self.__weight

         @weight.setter
         def weight(self,weight):     # 替代set_weight(self,weight):
            self.__weight=weight

    a1=Animal(2,0,10.0)
    print('a1体重:{0:0.2f}'.format(a1.get_weight()))    # 10.00
    a1.weight(123.45)             #  a1.set_weight(123.45)
    print('a1体重:{0:0.2f}'.format(a1.get_weight()))    # 123.45

定义属性getter访问器,使用了@property装饰器进行修饰,方法名就是属性名,这样就可以通过属性取值了。定义属性setter访问器,使用了@weight.setter装饰器进行修饰,weight是属性名,与getter和setter访问器方法名保持一致,可以通过a1.weight(123.45)赋值。属性本质就是两个方法,在方法前面加上装饰器使得方法成为属性。属性使用起来类似于共有变量,可以在赋值符“=”左边或右边,左边是被赋值,右边是取值。

    提示:定义属性时应该先定义getter访问器,在定义setter访问器。同时定义顺序不能颠倒,否则会出现错误。这是因为@property修饰getter访问器时, 定义了weight属性,这样在后面使用@weight.setter装饰器才是合法的。
EnlightenGAN训练复现记录 记录EnlightenGAN过程中的问题和解决方式。提示:以下是本篇文章正文内容,下面案例可供参考。 阅读详情

相关推荐

SWIPT技术(无线通信携能技术)的简介与架构——(后续补充无人机SWIPT方向)

SWIPT一、SWIPT(无线通信携能)技术简介1.1、组成:1.2、与传统无线通信的区别:1.3、SWIPT 的集成接收器架构设计1、单独的接收器2、TS架构——时间开关(Time switching,TS)3、PS架构——功率分流(Power splitting,PS)4、天线开关接收器主要两种架构的区别参考文献SWIPT的发展 一、SWIPT(无线通信携能)技术简介 SWIPT(Simultaneous Wireless Information and Power Transfer )是各种WPT技术

Blue 1万+

Python之封装

什么是封装,为什么要封装,隐藏属性,开放接口,隐藏数据属性,隐藏函数属性 property

weixin_47035302的博客 946

DataGridView 右键菜单复制(公共)

dataGridView1.CellMouseClick += new DataGridViewCellMouseEventHandler( (sender1, e1) => { if (e1.Button == MouseButtons.Right) {

沁心渃水 2830

编程新手必看,Python3中封装性知识点及语法学习总结(27)

Python中的封装性(Encapsulation)是面向对象编程的四大基本特性之一,它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类提供的方法进行操作,从而保证对象内部状态的安全性和完整性。

qq_45746668的博客 819

(头歌作业)—6.1 葡萄酒评论分析报告(project)

请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。

2301_80677920的博客 1244

YOLO项目部署:从Python脚本到Docker容器的企业级交付全流程

YOLO模型企业级Docker部署方案 核心挑战 环境一致性:解决"本地能跑,服务器崩掉"问题 可扩展性:支持单实例到多实例扩展 稳定性:确保99.9%可用性 部署流程 项目改造:模块化代码,分离配置 Docker镜像:支持CPU/GPU环境 API服务:封装推理逻辑 监控告警:实现自动化运维 技术方案 需求 解决方案 环境一致性 Docker镜像+依赖冻结 可扩展性 K8s+负载均衡 稳定性 健康检查+自动重启 项目结构 模块化代码组织 外部化配置管理 精确依赖版本控制 摘要重点:通过

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1230

python面向对象3大特性:封装、继承、多态(依赖注入)

1、封装:封装可以隐藏实现细节,保护隐私、使得代码模块化。

hi_testgirl的博客 439

基于matlab的CNN验证码识别系统(UI界面版)

基于matlab的CNN验证码识别系统(UI界面版),CNN验证码识别系统包括数据集处理、模型搭建、模型训练、界面设计与实现

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 481

[Python] 封装性

转自:https://www.cnblogs.com/fanweisheng/p/11231235.html

ykun089的博客 234

怎样让你的论文看起来“像人写的”?只用三招直接去除AI味(附提示词)

当然如果你在实际使用中还有其他需求,比如降重润色、改写翻译等,也可以结合七哥的专业写作平台来辅助,这个高级学术平台已经内置了ChatGPT4o、ChatGPT4.1、Claude3.7、满血版DeepSeek-R1等AI大模型,帮你写文献综述、干课题申报、写论文等学术任务绝对每一点问题。比如我自己的一套学术写作平台,其中的“降重与润色”模块整合了多种GPTs应用,除了能帮助调整语言风格、避免雷同表达,还可以顺带降个重,对于提升学术文本的整体质量还是非常有用的。一、为什么用AI写出来的文章会有AI味?

智能AI让学术科研更容易 1684

【立创EDA-PCB设计基础】4.模块化布局

本文对本专栏绘制的原理图进行模块化布局,首先进行预布局(将每个模块放一起),然后进行精细化布局(按照原理图来精细化布局)。

嵌入式阿齐Archie 3万+

python第四十三课——封装性

1.面向对象的三大特性:封装性、继承性、多态性封装:封装使用的领悟:1).生活层面:食品、快递、计算机、明星...2).计算机层面:①.模块、类、函数...②.属性数据的封装与隐藏权限修饰符的概念:public(公共的,范围最大) protected(收保护的)default(默认,缺省) private(私有的,范围最小)python语言没有以上这些关键字:对于python的属性私有化使用:__...

weixin_30951743的博客 134

爬虫:一文掌握 Pydoll 的详细使用(彻底改变浏览器自动化,且能绕过绕过验证码!)

Pydoll正在彻底改变浏览器自动化!与其他解决方案不同,它消除了对Web驱动程序的需求,提供了流畅可靠的自动化体验和本机异步性能。

数据知道的博客 1万+

004-封装性原理与实现

本文摘要: 《封装性原理与实现》是一篇面向对象编程的中级教程,重点讲解封装性概念、实现技术与最佳实践。文章首先定义了封装性作为OOP三大特性之一的核心原则,包括信息隐藏、接口统一、访问控制和数据保护。然后详细比较了Java和C++中的访问控制修饰符(public/protected/private/default)及其应用场景。教程提供了丰富的代码示例,展示属性封装的Getter/Setter标准模式、数据验证逻辑和不可变对象设计。文章还强调封装性在类接口设计中的重要性,指导开发者如何构建安全、清晰的API

wyl703的博客 1347

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Python面向对象编程 - 封装性:Python中的封装性用于将数据和操作封装在类中

封装性是面向对象编程的重要概念,它通过隐藏类的内部数据并通过公共接口暴露数据,提高了代码的安全性和可维护性。在Python中,封装性通过访问控制符来实现,但它更多地是一种约定而不是强制性规定。

Quantity>Quality 443

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python的封装性

在默认情况下,Python中的变量是公有的,可以在类的外部访问,若想成为私有变量,则在变量前边加双下划线(__)即可。封装隐藏了对象的内部细节,只保留了有限的对外接口,外部调用者不需要了解内部细节,使操作对象变得简单。对于以上代码,我们可以在类中定义属性,用属性替代set()和get() 这两个公有方法,在调用时会比较简单。为了实现对象的封装,在一个类中不应该有公有的成员变量,这些成员变量应该设置为私有,然后通过set赋值和get取值来访问。由于类的外部不能调用私有变量,因此外部调用时上述代码发生错误。

qq_56891068的博客 197

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

026-python面向对象-私有变量-封装性

封装性是面向对象是三大特征之一,python语言没有与封装性相关的关键字,它通过特定是名称实现对变量和方法的封装。 私有变量 默认情况下python中的变量的公有的,可以在类的外部访问他们。如果想让它们成为私有变量,可以在变量前加上双下划线“__” class Animal(object): """定义动物类""" def __init__(self, age, sex=1, w...

ZXCVBhbase的博客 258

Python_10_面向对象_04_封装性

封装通常是对成员变量进行的封装。在严格意义上的面向对象设计中,一个类是不应该有公有的实例成员变量的,这些实例成员变量应该被设计为私有的,然后通过公有的setter和getter访问器访问。使用setter和getter。

毅君帅 94

chatgpt赋能python:Python的内部类:优雅的封装性与灵活的应用

内部类,也称为嵌套类,指的是在类的内部直接定义的类。Python中,我们可以在类的内部定义包括普通类、抽象类、元类等在内的各种类型的类。内部类在类型定义中不向外界暴露,只有在外部类的方法或属性中调用,才可以被使用。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡。

pythonxxoo的博客 532

Python类的基础知识:属性、方法、实例化、继承、封装性

本文简要总结了Python类的基础知识:属性、方法、实例化、继承、封装性 Python类的基础知识总结一、定义和实例化1. 定义2. 实例化二、属性1. 最特殊的方法 \__init__2. 类属性3. 实例属性4. 特殊属性三、方法四、继承1. 子类的概念和判别2. override原则3. 多态三、封装性提高访问门槛以防出错总结 总结 类具有属性和方法:变量和函数 实例属性和实例方法,只能由实例来调用 类的弱封装性,私有属性或方法也可以调用 类的继承时遵循override原则,即子类会覆盖父类的

weixin_43899514的博客 311

Python进阶:类

初始化函数:初始化属性 init(self) 真正的构造函数是__new__() 析构函数 del(self) 删除对象的属性 delattr(对象, 属性) 对象是否有某个属性 hasattr(对象, 属性) 静态变量和静态方法 1. 静态变量:定义在函数外边 2. 静态方法:@staticmethod修饰,不需要 self 参数,属于类 3. 类方法:classmethod 修饰,函数不需要实...

onj123的博客 558

【Day 10-N21】Python类(2)——Python的封装性、私有变量、私有方法、使用属性

《Python封装性学习笔记》摘要:本文系统讲解了Python面向对象的封装特性,包括私有成员命名约定(__开头)、属性机制(property装饰器)和综合应用案例。封装通过隐藏实现细节(私有属性/方法)、控制访问权限(getter/setter)来保护数据安全,提升代码可维护性。重点演示了银行账户类和圆形类的封装实现,强调数据验证、透明接口和文档说明等最佳实践。封装作为OOP三大特性之一,为后续学习继承和多态奠定了基础,是编写健壮Python代码的核心技术。

qq_31964455的博客 736

封装性好的也意味着灵活性差。

封装性好的也意味着灵活性差。 C的灵活性肯定比C++ python高

自主无人机 PX4 ROS SLAM 路径规划 MVS等技术分享 325

Python进阶知识

Python—面向对象的三大特征(封装 继承 多态) 封装:把数据结合起来,形成一个整体,隐藏实现细节,对外部的代码提供使用。 继承:继承分为单继承和多继承,单继承是一个类只能继承一个父类,而多继承指的是一个类可以继承多个父类。 多态:多态依赖于继承,一个类的对象的引用,可以指向这个类的对象,也可以值向他子类的对象,在程序运行之后才知道具体执行的是哪个对象,通过这种形式产生多种形态的就叫做多态。 ...

A 200

学Python的漫画漫步进阶 -- 第九步.类与对象

在Python中,类是创建对象的蓝图或模板,而对象是类的实例。我们可以自定义类,即创建一种新的数据类型。Python中类的定义语法格式如右图所示。定义小汽车(Car)类的代码如下:小汽车(Car)类继承了object类,object类是所有类的根类,在Python中任何一个类(除object外)都直接或间接地继承了object,直接继承object时(object)部分的代码可以省略。在Python编程中,类(Class)和对象(Object)是非常基础且重要的概念。

华为奋斗者精神 4358

面向对象编程(OOP):理解类、封装性的关键概念

本文介绍了面向对象编程的关键概念,包括类、封装性和继承。通过使用类和对象,可以实现代码的封装和复用,提高开发效率。文章还讨论了类的封装性,包括访问修饰符和属性的访问器与设置器。此外,继承的概念也得到了详细解释,以及如何利用多态实现灵活性和可扩展性。魔术方法作为Python中特殊的函数,用于增强类的功能和行为。通过本文的学习,读者将更好地理解面向对象编程的核心概念,并能够更好地应用于实际开发中。

qq_41308872的博客 6498
上一篇: Python进阶-06-面向对象概述&基本特征&类的对象
下一篇: Python进阶-08-继承性
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值