Python---私有化

article/2023/6/4 14:47:46

专栏:python
个人主页:HaiFan.
专栏简介:Python基础已经更新完,接下来是Python面向对象的知识点。

私有化

  • 前言
  • 私有化属性
    • set和get
  • 装饰器@property

前言

在做程序的过程中,有时候程序猿不想让外人动一些值,这个时候,就可以考虑把一些变量进行私有化

__属性:就是将属性私有化,访问范围仅仅限于类中。

在这里插入图片描述

私有化属性

私有化属性只需要以双下划线开头,声明该属性为私有属性即可,声明之后就不能在类外部使用或直接访问。

class Student:__age = 10a = Student()
print(a.__age)

在这里插入图片描述
私有化属性的有三个特性:

  1. 不能在类外面访问
  2. 可以在类里面访问,修改
  3. 子类不能继承私有化属性

set和get

set是为了赋值,给私有化属性赋值。
get是为了取值,把私有化属性的值取出来。

class Student:__age = 10def __init__(self ,age):self.age = age# 定义公有的set方法和get方法def set_age(self ,age):self.__age = agedef get_age(self):return self.__agea = Student('100')
print(a.get_age())
a.set_age(1000)
print(a.get_age())

在这里插入图片描述
私有化好处:

  1. 隐藏属性不被外界随意修改(在set里面加一些判断,防止被随意修改)

  2. 也可以修改,通过函数完成

def setXXX(self,xxx):筛选赋值内容if 条件:赋值else:不赋值
  1. 如果想获取具体的某一个属性,使用get函数来完成
def getXXX(self):return 要返回的某一个属性

通过set和get函数即可完成对私有化属性的一些操作。

装饰器@property

class Stu:def __init__(self,name,age):self.name = nameself.__age = agedef set_age(self,age):if age > 0 and age < 100:self.__age = ageelse:print('不在规定范围内')def get_age(self):return self.__agedef __str__(self):return 'name: {} \nage:{}'.format(self.name,self.__age)a = Stu('lisan',20)
a.name = 'wangwu'
print(a.name)
a.set_age(30)
print(a.get_age())

当我想访问私有属性的时候,只能通过get和set函数来访问。
通过装饰器,就可以让私有属性当作属性一样去调用。

class Stu:def __init__(self,name,age):self.name = nameself.__age = age@propertydef age(self):return self.__age@age.setterdef age(self,age):self.__age = agedef __str__(self):return 'name: {} \nage:{}'.format(self.name,self.__age)a = Stu('lisan',20)
a.age = 90
print(a)
a.age = 40
print(a)

在这里插入图片描述


https://www.dgrt.cn/a/391922.html

相关文章

WebRTC音频系统 之audio技术栈简介-1

文章目录第一章 WebRTC技术栈简介1.1 视频会议中常见的服务端架构1.2 WebRTC 网络协议栈1.3 WebRTC 源码目录结构1.4 client侧技术栈1.5 WebRTC native编译以及debug1.6 APM模块1.7 ADM模块WebRTC是Google开源的Web实时音视频通信框架&#xff0c;其提供P2P的音频、视频和一般数…

基于nodejs+vue社区互助平台- vscode项目

前端技术&#xff1a;nodejsvueelementui,视图层其实质就是vue页面&#xff0c;通过编写vue页面从而展示在浏览器中&#xff0c;编写完成的vue页面要能够和控制器类进行交互&#xff0c;从而使得用户在点击网页进行操作时能够正常。 Express 框架于Node运行环境的Web框架, 语言…

【自动驾驶100问】第一问到第三问

配套视频&#xff1a; 自动驾驶100问第三问 1、四元数在表示空间旋转时的优势是什么&#xff1f; &#xff08;1&#xff09;四元数解决了其他3维空间旋转算法会遇到的恼人的问题&#xff0c;比如使用欧拉角来表示旋转操作时会遇到的万向节锁问题(Gimbal lock)&#xff1b; …

day03_注释丶关键字丶标识符丶常量

​注释 注释的概念&#xff1a;在编写程序的过程中&#xff0c;对程序代码进行解释说明。 代码本身和人类的自然语言相比&#xff0c;可读性肯定是要差一些&#xff0c;所以为了更快能够知道代码的含义、作用、需要注意地方&#xff0c;所有程序员都应该养成写注释的好习惯。 …

【千峰】React全球新闻发布管理系统

千锋2022版React全家桶教程_react零基础入门到项目实战完整版_哔哩哔哩_bilibili 七模块 1. 登录模块 – 登录验证拦截 粒子特效。 2. 权限管理模块 权限列表&#xff0c;以及权限的增删改查 角色列表&#xff0c;以及角色的增删改查 3. 用户管理模块 用户列表&…

Idea热加载插件JRebel激活及使用教程

前言在 Java 开发领域&#xff0c;热部署一直是一个难以解决的问题&#xff0c;目前的 Java 虚拟机只能实现方法体的修改热部署&#xff0c;例如使用devtool来实现热部署&#xff0c;但是在功能上它也有所限制&#xff0c;如果新增方法或者修改方法参数后&#xff0c;热部署是不…

史上最牛叉的AI导航网站

最近很火的chatGPT就是出自这个公司之手&#xff0c;是开源的产品&#xff0c;这个东西需要大量的数据及算力支持&#xff0c;只在部分地区可以使用&#xff0c;当然大家也可以使用一些衍生产品使用这个对话工具。下面简单介绍一些AI导航网站&#xff0c;chatGPT只是导航网站收…

C++:基础记录:时间函数整理

C中并没有针对时间特意提供特定的时间类型&#xff0c;而是直接继承了C语言的结构以及函数&#xff0c;因此在C中使用时间函数需要引用<ctime>头文件(或者<time.h>)这篇文章主要介绍了C时间函数。 格林威治时间GMT&#xff08;Greenwich Mean Time&#xff09; 格林…