首页 > 编程语言 >python基础 类(二) 类的封装与属性隐藏

python基础 类(二) 类的封装与属性隐藏

时间:2023-11-27 23:38:15浏览次数:41  
标签:封装 下划线 python self 实例 方法 隐藏 s1 name

封装

创建一个实例对象后,事先定义在类的函数就成为该实例对象的函数即方法,事先定义在类中绑定在self上的变量成为该实例对象的数据,各个实例对象的方法和数据是互相独立的,互干扰影响

类的实例对象可以调用函数即方法,这样通过方法来访问或者修改属于该实例对象的数据,就是所谓的封装,把数据(属性)包裹在方法里面,而不是直接暴露给外界

外界的我们为您我们只需要知道调用该方法就能修改或访问我们想要的数据,而不需要知道方法的具体实现细节,方法里面到底是怎样实现的

class Student:

    def __init__(self, name):
        self.name = name
	def get_name(self):
        print(f'students name is : {self.name}')

s1 = Student('a')
s1.get_name()
s2 = Student('b')
s2.get_name()

执行结果
image

如上,外界只需要给出参数创建实例对象,并调用方法get_name就能得到打印出name数据,至于具体是如何打印出来的,外界不需要知道

属性隐藏

从上面封装的思想来看,要想访问或者修改属性是要通过调用方法的,看看这个例子

class Student:

    def __init__(self, name):
        self.name = name
    def get_name(self):
        print(f'students name is :{self.name}')

s1 = Student('a')
print(f'name: {s1.name}')
s1.name = 'a2'
print(f'name: {s1.name}')

执行结果
image
如上,直接通过调用实例变量的方式获得或者修改了属性数据

事实上,python并没有采取明确的措施来禁止我们这样做,只是封装思想史面向对象编程的思想之下,我们最好还是用封装的思想来访问数据
举个例子,如果我get_name中在print之前还有其他逻辑代码,如调用其他函数或者把name变为大写,这样在外部直接访问属性的话,得出的数据就是天差地别了

要让方法或者属性不被外面直接访问,可以在其名称前面以两个下划线打头,这样就变成一个私有方法或属性,如下
image

但其实加了双下划线后也还是有办法从外部访问,只要知道了解python处理规则即可,python对以双
下划线开头的名称都进行了转换,即在开头加一个下划线和类名,如上面例子从外部访问就是

s1._Student__name

还有一种是以一个下划线打头的属性或者方法,它的意思是,尽管它可以从外部直接访问,但请不要这样做,请把它看作是私有的

总之python没有明确的具体措施来禁止我们从外部直接访问,只是通过下划线开头来提示你别这样干

注意还有一种以双下划线开头又以双下划线结尾的变量或方法,这是特殊变量或者方法的意思,不是私有的意思,和前面说的单或双下划线开头是不同的

标签:封装,下划线,python,self,实例,方法,隐藏,s1,name
From: https://www.cnblogs.com/MyRecords/p/17814550.html

相关文章

  • Python用偏最小二乘回归Partial Least Squares,PLS分析桃子近红外光谱数据可视化
    全文链接:https://tecdat.cn/?p=34376原文出处:拓端数据部落公众号PLS,即偏最小二乘(PartialLeastSquares),是一种广泛使用的回归技术,用于帮助客户分析近红外光谱数据。如果您对近红外光谱学有所了解,您肯定知道近红外光谱是一种次级方法,需要将近红外数据校准到所要测量的参数的主要......
  • R语言和Python对copula模型Gaussian、t、Clayton 和 Gumbel 族可视化理论概念和文献计
    原文链接:http://tecdat.cn/?p=27240 原文出处:拓端数据部落公众号最近我们被客户要求撰写关于copula的研究报告,包括一些图形和统计输出。本文包含一些直观的示例来说明copula理论的核心概念。以下是脚本及其各自用途的简短列表:首先演示如何使用高斯copula来模拟具有任意......
  • Python实现完全二叉树
    给定一个元素序列(如列表),递归的创建一颗完全二叉树完整代码如下#!/usr/bin/envpython3classTreeNode:"""Nodeofcompletetree"""def__init__(self,data=0):self.data=dataself.left=Noneself.right=Nonedefb......
  • Java的Buffer流输入封装类
    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.StringTokenizer;classQuickReader{privatefinalBufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(System.in));......
  • 关于python中pip安装库过程中报错的解决办法
    晚上使用flask框架搭建web服务,启动后报错如下:WARNING:Thisisadevelopmentserver.Donotuseitinaproductiondeployment.UseaproductionWSGIserverinstead. 经过搜索大法,发现是因为在开发环境中,Flask应用程序是使用内置的服务器(如SimpleServer或Lighttpd)运......
  • 【Python】Formatter预定义的字段有哪些
    字段描述namelogger名字levelno日志级别数字levelname日志级别字符串pathname打印日志文件路径filename打印日志文件名module模块名lineno日志调用行数funcName日志调用所在函数名created消息创建时的时间对象(time.time())asctime消......
  • 【Python】【OpenCV】Cameo项目(一)实时显示摄像头帧
     Cameo项目介绍:1、实时捕获并显示摄像头帧。2、具备截图、保存视频和退出三个功能键。 要求存在文件:manager.py和cameo.py 一、manager.py两个类:CaptureManager、WindowManager  CaptureManager负责摄像头帧的捕获,编解码得到实际帧,当前帧保存为图片、一段时间内的......
  • C++ vs Python
    WhyC++isfasterthanPythonhttps://www.freecodecamp.org/news/python-vs-c-plus-plus-time-complexity-analysis/SummaryTable编程语言stronglytyped?跨平台语言类型C++YesYes编译型PythonNoYes解释型参考资料stronglytypedprogrammingla......
  • 学习Python相关软件的安装
    学习Python相关软件的安装Typora软件的使用它不是国产软件的,它是国外的,官方网站是国外,在国内下载国外的软件,就会出现下载速度慢的问题#1.下载:https://typoraio.cn/这个软件不是免费使用的,虽然收费但是不贵,很好用!#2.这款软件是支持markdown格式的,是目前使用最为频繁......
  • 学习python的计算机基础
    编程与编程语言1.什么是语言? #语言就是人与人之间交流的媒介2.什么是编程语言呢? #就是人与计算机之间交流的媒介常见的编程语言:Python、Java、Go、PHP、C、C++、C#等3.什么是编程? #编程就是写代码编程就是程序员(码农)使用计算机能够读懂的语言把自己的'......