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 面向对象-访问权限修饰符相关推荐

  1. python中的类属性和类方法_Python 面向对象,类的属性和 类的方法

    面向对象,类的属性和 类的方法 面向对象 类和对象 Python类定义 类属性 类方法 面向过程和面向对象 面向过程 和 面向对象 编程 面向过程 编程:函数式编程,C程序,shell等 面向对象 编 ...

  2. python中的类属性和类方法_python面向对象之类属性和类方法的使用和实例

    类属性和类方法 目标 类的结构类属性和实例属性类方法和静态方法 01. 类的结构 1.1 术语 -- 实例 1. 使用面相对象开发,第 1 步 是设计 类 2. 使用 类名() 创建对象,创建对象 的 ...

  3. python如何定义类_Python 面向对象

    Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...

  4. python对象点方法_python面向对象知识点疏理

    面向对象技术简介 类:用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例.class 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在 ...

  5. python类详解_python面向对象编程:python类和实例讲解

    东尧爱分享 这是东尧每天一篇文章的第51天 东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福. 1 什么是对象 在python里面,一切皆为对象.也就是说python里的所有数据都 ...

  6. python函数封装图解_Python面向对象之封装

    前文导读 知识框架: 1.什么是封装 2.封装的优点与原则 3.私有变量和私有方法 4.封装的更多说明 什么是封装 封装是面向对象编程的一大特点,面向对象编程的第一步将属性和方法封装到一个抽象类中,外 ...

  7. python属性和局部变量_python类与对象1

    1.类的基本用法 2.封装继承多态 3.特殊属性和方法 1.类的基本用法 1.1 类的定义与常用术语 1.2 类的创建使用和构造方法 1.3 self 1.4 类属性和实例属性 1.5 局部变量 1. ...

  8. 可访问范围 与 visual 或 abstract “修饰符”

    protected:在当前类内定义,则在当前类"内部"可以调用,则在 派生子类"内部" 也可以调用 private,除去,在 派生子类"内部" ...

  9. python中函数修饰符_python中的函数修饰符

    首先,什么是函数修饰符?函数修饰符就是对原有函数做一层包装.比如有以下两个函数: def func1(): print 'I am function func1' def func2(): print ...

最新文章

  1. 达摩院浙大上海人工智能实验室推出洛犀平台:大小模型端云协同进化
  2. Excel教程(12) - 数学和三角函数
  3. Ethereum Bootstrap 以太坊本地私有链开发环境搭建
  4. VTK:几何对象之PlatonicSolids
  5. Mac连接路由器后没有反应_无线WiFi无法连接到网络怎么办【解决方法】
  6. 小程序 --- 点击放大功能、获取位置信息、文字样式省略、页面跳转(navigateTo)
  7. switch off c语言,逆向工程 | C 语言之 switch-case 分支
  8. UART通信协议(三)GPIO模拟串口
  9. html手机页面怎么长按不出复制,HTML -----对于手机页面长按会粘贴复制的禁用
  10. miui9android8.0xp框架,MIUI9MIUI10官方8.0/8.1刷入xp框架
  11. 【OCC学习20】使用TKSTL输出stl格式文件
  12. html的单元格加线,html表格单元格添加斜下框线的方法
  13. 手写文本 matlab 识别,手写汉字识别matlab
  14. secureCRT注册码
  15. python如何抓取图片数据_python 的简单抓取图片
  16. 小鸟云服务器如何通过本地安全策略阻止IP访问?
  17. 计算机科学计数法符号,科学计数法怎么表示
  18. WIn10 1909 Windows Hello 指纹:出现错误,请稍后再试一次
  19. Quartus TCL
  20. Linux电脑睡眠后黑屏打不开,电脑睡眠后黑屏打不开 电脑睡眠后黑屏打不开的原因...

热门文章

  1. oracle视图view看不出来主键,oracle - 使用主键创建视图
  2. java gc回收区域_java内存区域以及GC回收
  3. redis 中一个字段 修改map_Redis bitmap 位图 从入门到精通 基础 实战 妙用
  4. 二进制文件被拒_苹果商店上架,二进制文件被拒绝
  5. range python命令_Python学习笔记(一)
  6. 机器学习优化算法(一)
  7. SAP 电商云 Spartacus UI Checkout 页面的三个 page guards
  8. SAP 电商云 Spartacus UI 设置 Delivery Mode 的时序分析和一个竞争条件问题分享
  9. jMeter parallel controller 无法使用 CSV Data config 提供的变量?
  10. 如何使用 Node.js 访问 SAP HANA Cloud 数据库里的数据