不允许你不知道的Python私有属性和私有方法

1.为什么要使用私有属性和私有方法

  • 嘿,各位Python爱好者们,你们有没有遇到过这样的情况:你正在编写一个类,里面有一些属性或方法,你并不想让它们被外部直接访问或修改,但又需要某种方式来控制它们的访问和修改。这就要使用到Python中的私有属性和私有方法。

  • 简单来说,私有属性和私有方法可以帮助我们封装数据和方法,提高代码的可维护性和安全性。想象一下,如果你的属性或方法被外部直接访问或修改,那么你的代码可能会变得非常脆弱,很容易受到各种攻击或者错误的使用。

2.私有属性

  • 在Python中,你可以通过在属性名前面加上两个下划线来创建私有属性。这意味着这个属性只能被类内部的方法访问,而不能被类的外部代码所访问。这样做的好处是可以隐藏类的实现细节,只暴露必要的方法和属性,使得类的内部更加安全和可控。

3.私有方法

  • 私有方法在Python中的表示方式与私有属性类似,也是在方法名前面加上两个下划线。与私有属性不同的是,私有方法只能被同一个类中的其他方法所调用,而不能被类的外部代码所调用。

4.举例子

  • 定义类

# 定义类
class Girl():
    # 构造函数
    def __init__(self, name, sex, height):
        self.name = name
        self.sex = sex
        self.height = height
        # 在属性的前面加 __ 就变为私有属性
        self.__age = 18

    # 定义一个方法,提供给类的外部访问私有属性,但是一般会设置限制条件,当条件满足后,可以访问私有属性
    def sayAge(self, boyFriend):
        if boyFriend == "小明":
            print("我的年龄是:", self.__age)
        else:
            print("女孩的年龄是密码不能随意打听...")

    # 方法
    def say(self):
        print("说话的方法")

    # 私有方法:在方法名的前面加 __
    def __kiss(self):
        print("一吻定终生")

    # 在类的内部可以调用私有方法,一般会设置限定条件,若条件满足,则调用私有方法,若条件不满足,则不调用私有方法
    def love(self, relation):
        if relation == "情侣":
            self.__kiss()
        else:
            print("__kiss是私有方法,不能随意调用...")


# 创建对象
girl = Girl("小兰", "女", 168)
# 通过对象访问属性(公有属性)
print(girl.name)
print(girl.sex)
print(girl.height)
# 通过对象访问方法(公有方法)
girl.say()

# 在类的外部不能直接访问私有属性
# print(girl.__age)    # AttributeError: 'Girl' object has no attribute '__age'

# 通过公开的对外的方法,传入条件,条件满足能访问到私有属性,条件不满足不能访问私有属性
girl.sayAge("小光")    # 女孩的年龄是密码不能随意打听...
girl.sayAge("小明")    # 我的年龄是:18

# 在类的外部不能直接调用私有方法
# girl.__kiss()    # AttributeError: 'Girl' object has no attribute '__kiss'

# 通过公开的对外的方法,传入条件,条件满足能调用私有方法,条件不满足不能调用私有方法
girl.love("朋友")
girl.love("情侣")
  • 执行结果

小兰
女
168
说话的方法
女孩的年龄是密码不能随意打听...
我的年龄是:18
__kiss是私有方法,不能随意调用...
一吻定终生

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C/C++】C语言开发者必读:迈向C++的高效编程之旅

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方…

VUE3项目学习系列--Axios二次封装(五)

Axios中文文档 | Axios中文网 (axios-http.cn) Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequ…

【回归预测】基于SSA-BP(麻雀搜索算法优化BP神经网络)的回归预测 多输入单输出【Matlab代码#69】

文章目录 【可更换其他算法,获取资源请见文章第6节:资源获取】1. BP神经网络2. 麻雀搜索算法3. SSA-BP神经网络模型的构建4. 部分代码展示5. 仿真结果展示 【可更换其他算法,获取资源请见文章第6节:资源获取】 1. BP神经网络 BP&…

新手向-从VNCTF2024的一道题学习QEMU Escape

[F] 说在前面 本文的草稿是边打边学边写出来的,文章思路会与一个“刚打完用户态 pwn 题就去打 QEMU Escape ”的人的思路相似,在分析结束以后我又在部分比较模糊的地方加入了一些补充,因此阅读起来可能会相对轻松(当然也不排除这是…

python之前端css样式(一)

css ID选择器 #c1{color:red;#边框为红色border:1px solid red; } <div id"c2">中国移动</div> 类选择器 .xx{color:blue; } <div class"xx">中国联通</div> 标签选择器 li{color: pink; } <ul><li>北京</li…

STM32输入捕获模式测频率

STM32频率的测量&#xff1a;高频适合使用的方法是测频法&#xff0c;低频适合使用的是测周法&#xff0c;&#xff08;其中使用测频法测量频率比较稳定&#xff0c;使用测周法测量频率的方式没有这么稳定&#xff0c;因为测周法只会通过一次的测量就能得出结果所以测试出来的频…

任务管理器进程结束错了,电脑显示白屏该怎么办

电脑就是一个全白&#xff0c;吓人的一批&#xff0c;毕竟以前出过cmd运行出错&#xff0c;然后黑屏&#xff0c;最后只能重装系统。这里出现白屏是还好的&#xff0c;切换了另外的用户&#xff0c;发现电脑上原来的文件还在&#xff0c;所有按下面的方法就解决了。 1.打开任务…

网络编程—DAY3

模拟面试 1.什么是IP地址 是给互联网上的每台主机分配的唯一标识 2.IP地址和mac地址的区别 mac地址是设备的硬件地址&#xff0c;ip地址是给主机分配的网络地址 3.当电脑从一个网络切换到另一个网络哪个会变 ip地址会变&#xff0c;mac地址不会变 4.什么是端口号 用于区…

leetcode 热题 100_环形链表 II

题解一&#xff1a; 哈希表&#xff1a;遍历链表&#xff0c;用哈希表存储遍历过的链表节点&#xff0c;判断链表节点是否在哈希表中存在&#xff0c;如果存在说明链表出现过&#xff0c;第一个重复出现的节点即为开始入环的第一个节点。 import java.util.HashSet;public cla…

【计算机网络】什么是http?

​ 目录 前言 1. 什么是HTTP协议&#xff1f; 2. 为什么使用HTTP协议&#xff1f; 3. HTTP协议通信过程 4. 什么是url&#xff1f; 5. HTTP报文 5.1 请求报文 5.2 响应报文 6. HTTP请求方式 7. HTTP头部字段 8. HTTP状态码 9. 连接管理 长连接与短连接 管线化连接…

无线局域网——wlan

目录 一.wlan的含义和发展 二.wlan技术带来的挑战 1.企业办公场景多样 2.位置速度的要求 3.安全的要求 4.规范的挑战 三.家庭和企业不同的部署需求 1.胖AP模式组网 2.AC瘦AP模式组网 3.组网模式的不同 四.三层隧道转发实验 1.拓扑 2.AP上线 核心交换机vlan ​编辑…

IIS上部署.netcore WebApi项目及swagger

.netcore项目一般是直接双击exe文件&#xff0c;运行服务&#xff0c;今天有个需求&#xff0c;需要把.netcore项目运行在IIS上&#xff0c;遇到了一个小坑&#xff0c;在这里记录一下。 安装IIS&#xff0c;怎么部署站点&#xff0c;这些过于简单就不细说了&#xff0c;不知道…

vue3+Ts项目按需引入Echarts,并封装成hooks

记录 vue3Ts 项目中&#xff0c;按需引入echarts并进行二次封装使用。 1、安装&#xff1a;npm i echarts 2、新增按需引入配置文件&#xff1a;echartsConfig.ts // 引入 echarts 核心模块&#xff0c;核心模块提供了 echarts 使用必须要的接口。 import * as echarts from …

代码随想录阅读笔记-字符串【反转字符串】

题目 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印…

Web核心,HTTP,tomcat,Servlet

1&#xff0c;JavaWeb技术栈 B/S架构:Browser/Server&#xff0c;浏览器/服务器架构模式&#xff0c;它的特点是&#xff0c;客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器&#xff0c;获取Web资源&#xff0c;服务器把Web资源…

windows 免密码ssh登录linux;linux免密码ssh登录其他linux

1、windows 免密码ssh登录linux 参考&#xff1a;https://blog.csdn.net/qq285744011/article/details/118293937 1&#xff09;windows先生成公钥私钥 ssh-keygen -t rsa -C "你的邮箱地址"生成后放在用户命令.ssh文件下 2&#xff09;把公钥复制到linux /root/…

【STM32 定时器(二)TIM 输入捕获PWM 总结】

STM32定时器之输入捕获总结 OC介绍PWM介绍PWM初始化代码部分开启时钟配置时基单元配置CCR配置GPIO配置复用和重定义功能 开启定时器代码实现 &#xff1a;实现呼吸灯 OC介绍 PWM介绍 PWM参数计算 分辨率越细&#xff0c;分的分量越精细&#xff0c;越稳定&#xff0c;假如它为…

洛谷P8972 『GROI-R1』 一切都已过去(树上前缀和+运算符重载)

『GROI-R1』 一切都已过去 题目背景 悦关上窗&#xff0c;拉上帘布。 果然还是想不起来啊。 隐约记得曾和什么人一起做过这样的事。 仰面躺下&#xff0c;手执一只木笺。 「究竟如何&#xff0c;才能拥有“过去”啊……」 她闭上双眼。 「6 岁前的记忆……究竟如何才能…

Python Flask框架 -- url

这里限定了int&#xff0c;所以只能输入数字 完整代码&#xff1a; # 从flask这个包中导入Flask类 from flask import Flask, request# 使用Flask类创建一个app对象 # __name__ 代表当前app.py这个模块 app Flask(__name__)app.route(/blog/path) def hello_world():return H…

ThingsBoard初始化数据库Postgres

视频教程&#xff1a; ThingsBoard初始化数据库postgres_哔哩哔哩_bilibilihingsBoard是一个基于Java的开源物联网平台&#xff0c;旨在实现物联网项目的快速开发、管理和扩展。本课程主要从0到1带你熟悉ThingsBoard&#xff0c;学习优秀的物联网变成思维与思想&#xff0c;主…