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里os什么模块_python