当前位置: 首页 > news >正文

Python 访问和设置私有属性

Python __init__ 初始化函数中在属性名前面加2条下划线的形式表示把当前属性设置为私有实例属性后,在外部(指创建当前类的实例对象)如何进行访问并更新该属性值?

  1. 首先创建一个 Person类,在类中通过 设置2个实例函数去访问和修改私有属性
class Person:def __init__(self):self.__age = 18  # 定义一个私有化属性def get_age(self):  # 访问私有属性return self.__agedef set_age(self, age):  # 修改私有属性if age <= 0:print('年龄不能小于0')else:self.__age = age

外部进行对 Person 对象实例化,通过 p 去调用到 get_ageset_age 实例方法来获取或修改私有属性值

p = Person()
print(p.get_age) #访问私有属性
p.set_age(20) #修改私有属性

但以上的做法,是要在 Person 类中通过定义实例方法,并且要去调用实例方法才能对私有属性进行访问或修改。那么我们还有没有其他方式?不用去调用实例方法,而是通过 实例对象 **.**出来私有属性(同公共属性的访问一样)去对私有属性进行访问和修改呢?那就是下面介绍的 property 属性函数了


  1. 使用 property 属性函数实现方式,示例如下:
    创建一个 Person类,并把 age 设置成私有属性。通过使用 property 函数,实现外部直接通过访问属性的形式去访问到私有属性
class Person:def __init__(self):self.__age = 18  # 定义一个私有化属性def get_age(self):  # 访问私有属性return self.__agedef set_age(self, age):  # 修改私有属性if age <= 0:print('年龄不能小于0')else:self.__age = age# 定义一个类属性,实现通过直接访问属性的形式去访问私有属性age = property(get_age,set_age)

外部进行对 Person 对象实例化调用

p = Person()
print(p.age)
p.age=20

  1. 使用 property装饰器 的现实方式,示例如下:
class Person:def __init__(self):self.__age = 18  # 定义一个私有化属性@property  # 使用装饰器对age进行装饰,提供一个getter方法def age(self):  # 访问私有属性return self.__age@age.setter  # 使用装饰器对age进行装饰,提供一个setter方法def age(self, age):  # 修改私有属性if age <= 0:print('年龄不能小于0')else:self.__age = age

外部进行对 Person 对象实例化调用

p = Person()
print(p.age)
p.age=20

相关文章:

  • Git 常用命令备忘
  • 字节码编程javassist之获取方法参数类型,参数值列表,返回值等
  • mysql怎么调整缓冲区大小
  • 游戏开发面试题3
  • 第二十九天 第八章 贪心算法 part03 134. 加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列
  • 掌握【Python异常处理】:打造健壮代码的现代编程指南
  • flutter背景贴图的困难总结
  • LDRA Testbed(TBrun)软件单元测试_实例讲解(指针类型的处理)
  • 自然语言处理与Transformer模型:革新语言理解的新时代
  • LlamaGen:自回归模型的图像生成革命
  • 大语言模型系列-Transformer
  • 人工智能概论 | 基于A*算法的8数码问题求解
  • 绝区肆--2024 年AI安全状况
  • wordpress网站添加一个临时维护功能
  • 车辆出险报告API接口及使用
  • 【Leetcode】101. 对称二叉树
  • Angular 响应式表单 基础例子
  • crontab执行失败的多种原因
  • golang中接口赋值与方法集
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JAVA_NIO系列——Channel和Buffer详解
  • JDK 6和JDK 7中的substring()方法
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Python中eval与exec的使用及区别
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • webpack入门学习手记(二)
  • Web标准制定过程
  • 聊聊flink的TableFactory
  • elasticsearch-head插件安装
  • 进程与线程(三)——进程/线程间通信
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • #include<初见C语言之指针(5)>
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (2.2w字)前端单元测试之Jest详解篇
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (第一天)包装对象、作用域、创建对象
  • (二)Linux——Linux常用指令
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (每日一问)基础知识:堆与栈的区别
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (四)软件性能测试
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (自用)gtest单元测试
  • .Net CF下精确的计时器
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net wcf memory gates checking failed
  • .net 程序发生了一个不可捕获的异常
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验