python属性访问权限_python 面向对象-访问权限修饰符
1、访问权限修饰符可以用来修饰变量和方法
2、内部调用和外部调用:
比如在类的内部调用实例方法,叫内部调用;在类的外部调用实例化方法,叫外部调用
当然,类变量以及实例变脸也是有内部调用和外部调用
#coding=utf-8
classStudent():
name= ""age=0
sum=0def __init__(self,name,age): #构造函数
self.name =name
self.age=agedef do_homework(self):#实例方法
self.do_english_homework()#内部调用
print(self.name +"do homework")defdo_english_homework(self):print(self.name+ "do english homework")
student1= Student("anson",19)#student1.do_english_homework()
student1.do_homework()#外部调用#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test6.py"#anson do english homework#anson do homework
3、安全隐患:直接通过外部调用一些变量,可能造成一些不安全的因素。
比如,给学生打分,如果直接外部访问,修改学生分数,是非常危险的。所以,推荐调用方法去修改对象属性
#coding=utf-8
classStudent():
sum=0def __init__(self,name,age): #构造函数
self.name =name
self.age=agedef do_homework(self):#实例方法
self.do_english_homework()print(self.name +"do homework")defdo_english_homework(self):print(self.name+ "do english homework")defmarketing(self,score):if score <0:return
else:
self.score=scoreprint (self.name+"score :" +str(score))
student1= Student("anson",19)
student1.score= -1 #可以修改,但是没有逻辑限制,很危险
print(student1.__dict__)
student1.marketing(60)#可以修改,但是有逻辑限制,python 、Java、都是推荐使用的#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test6.py"#{'age': 19, 'score': -1, 'name': 'anson'}#anson score :60
4、使用访问权限修饰符,限制外部调用直接修改变量:对方法
ps.python 中不用修饰符修饰时,默认都是public 的(python 没有public private 这种权限修饰符),得着么做来限制__funcname()即可表示这个方法不能被外部访问
#coding=utf-8
classStudent():
sum=0def __init__(self,name,age): #构造函数
self.name =name
self.age=agedef do_homework(self):#实例方法
self.do_english_homework()print(self.name +"do homework")defdo_english_homework(self):print(self.name+ "do english homework")def __marketing(self,score):if score <0:return
else:
self.score=scoreprint (self.name+"score :" +str(score))
student1= Student("anson",19)
student1.__marketing(60)#左边双下划线,表示这个方法不允许外部访问#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test6.py"#Traceback (most recent call last):#File "/Users/anson/Documents/Project/python_ToolCodes/test6.py", line 22, in #student1.__marketing(60)#AttributeError: Student instance has no attribute '__marketing'
5、使用访问权限修饰符,限制外部调用直接修改变量:对变量
student1.__score = -1:还是能去访问,没啥用
#coding=utf-8
classStudent():
sum=0def __init__(self,name,age): #构造函数
self.name =name
self.age=agedef do_homework(self):#实例方法
self.do_english_homework()print(self.name +"do homework")defdo_english_homework(self):print(self.name+ "do english homework")def __marketing(self,score):if score <0:return
else:
self.score=scoreprint (self.name+"score :" +str(score))
student1= Student("anson",19)
student1.__score = -1
print(student1.__dict__)#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test6.py"#{'age': 19, '__score': -1, 'name': 'anson'}
再来:
student1有__score 属性
student2 没有这个属性,如果去读这个属性student2.__score,必然报错
实际上呢,student1利用了python的动态添加特性,给新增了个__score 属性,student2没去新增这个属性,当然就读不出来了。
所以__score 这招,在方法的访问限制上是生效的,但是对变量没啥用。
#coding=utf-8
classStudent():
sum=0def __init__(self,name,age): #构造函数
self.name =name
self.age=agedef do_homework(self):#实例方法
self.do_english_homework()print(self.name +"do homework")defdo_english_homework(self):print(self.name+ "do english homework")def __marketing(self,score):if score <0:return
else:
self.score=scoreprint (self.name+"score :" +str(score))
student1= Student("anson",19)
student1.__score = -1
print(student1.__dict__)
student2= Student("bob",19)print(student2.__dict__)#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test6.py"#{'age': 19, '__score': -1, 'name': 'anson'}#{'age': 19, 'name': 'bob'}
总结,python 其中总的来说好似没发强制限制开发者不能去读私有变量的,开发者用魔术方法还是可以读到,但是,总的来说,靠人治,靠自觉吧
python属性访问权限_python 面向对象-访问权限修饰符相关推荐
- python中的类属性和类方法_Python 面向对象,类的属性和 类的方法
面向对象,类的属性和 类的方法 面向对象 类和对象 Python类定义 类属性 类方法 面向过程和面向对象 面向过程 和 面向对象 编程 面向过程 编程:函数式编程,C程序,shell等 面向对象 编 ...
- python中的类属性和类方法_python面向对象之类属性和类方法的使用和实例
类属性和类方法 目标 类的结构类属性和实例属性类方法和静态方法 01. 类的结构 1.1 术语 -- 实例 1. 使用面相对象开发,第 1 步 是设计 类 2. 使用 类名() 创建对象,创建对象 的 ...
- python如何定义类_Python 面向对象
Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...
- python对象点方法_python面向对象知识点疏理
面向对象技术简介 类:用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例.class 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在 ...
- python类详解_python面向对象编程:python类和实例讲解
东尧爱分享 这是东尧每天一篇文章的第51天 东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福. 1 什么是对象 在python里面,一切皆为对象.也就是说python里的所有数据都 ...
- python函数封装图解_Python面向对象之封装
前文导读 知识框架: 1.什么是封装 2.封装的优点与原则 3.私有变量和私有方法 4.封装的更多说明 什么是封装 封装是面向对象编程的一大特点,面向对象编程的第一步将属性和方法封装到一个抽象类中,外 ...
- python属性和局部变量_python类与对象1
1.类的基本用法 2.封装继承多态 3.特殊属性和方法 1.类的基本用法 1.1 类的定义与常用术语 1.2 类的创建使用和构造方法 1.3 self 1.4 类属性和实例属性 1.5 局部变量 1. ...
- 可访问范围 与 visual 或 abstract “修饰符”
protected:在当前类内定义,则在当前类"内部"可以调用,则在 派生子类"内部" 也可以调用 private,除去,在 派生子类"内部" ...
- python中函数修饰符_python中的函数修饰符
首先,什么是函数修饰符?函数修饰符就是对原有函数做一层包装.比如有以下两个函数: def func1(): print 'I am function func1' def func2(): print ...
最新文章
- 达摩院浙大上海人工智能实验室推出洛犀平台:大小模型端云协同进化
- Excel教程(12) - 数学和三角函数
- Ethereum Bootstrap 以太坊本地私有链开发环境搭建
- VTK:几何对象之PlatonicSolids
- Mac连接路由器后没有反应_无线WiFi无法连接到网络怎么办【解决方法】
- 小程序 --- 点击放大功能、获取位置信息、文字样式省略、页面跳转(navigateTo)
- switch off c语言,逆向工程 | C 语言之 switch-case 分支
- UART通信协议(三)GPIO模拟串口
- html手机页面怎么长按不出复制,HTML -----对于手机页面长按会粘贴复制的禁用
- miui9android8.0xp框架,MIUI9MIUI10官方8.0/8.1刷入xp框架
- 【OCC学习20】使用TKSTL输出stl格式文件
- html的单元格加线,html表格单元格添加斜下框线的方法
- 手写文本 matlab 识别,手写汉字识别matlab
- secureCRT注册码
- python如何抓取图片数据_python 的简单抓取图片
- 小鸟云服务器如何通过本地安全策略阻止IP访问?
- 计算机科学计数法符号,科学计数法怎么表示
- WIn10 1909 Windows Hello 指纹:出现错误,请稍后再试一次
- Quartus TCL
- Linux电脑睡眠后黑屏打不开,电脑睡眠后黑屏打不开 电脑睡眠后黑屏打不开的原因...
热门文章
- oracle视图view看不出来主键,oracle - 使用主键创建视图
- java gc回收区域_java内存区域以及GC回收
- redis 中一个字段 修改map_Redis bitmap 位图 从入门到精通 基础 实战 妙用
- 二进制文件被拒_苹果商店上架,二进制文件被拒绝
- range python命令_Python学习笔记(一)
- 机器学习优化算法(一)
- SAP 电商云 Spartacus UI Checkout 页面的三个 page guards
- SAP 电商云 Spartacus UI 设置 Delivery Mode 的时序分析和一个竞争条件问题分享
- jMeter parallel controller 无法使用 CSV Data config 提供的变量?
- 如何使用 Node.js 访问 SAP HANA Cloud 数据库里的数据