1.物件導向的三大特性:封裝性、繼承性、多型性
封裝:封裝使用的領悟:
1).生活層面:食品、快遞、計算機、明星...
2).計算機層面:
①.模組、類、函式...
②.屬性資料的封裝與隱藏
許可權修飾符的概念:
public(公共的,範圍最大) protected(收保護的)default(預設,預設) private(私有的,範圍最小)
python語言沒有以上這些關鍵字:
對於python的屬性私有化使用:__來實現
在設計完類,外界建立物件通過.的形式訪問(設定)屬性,
可能會出現跟現實情況不符的混亂資料,那麼我們就將屬性的設定權沒收(外界不能直接通過.呼叫屬性),
在類的內部提供外界額外的訪問方式(定義setter和getter方法),
並且在需要的時候,可以在函式的內部加入資料合法性的校驗;
模板:對於setter函式,命名:set屬性名(首字母大寫)
對於getter函式,命名:get屬性名(首字母大寫)
私有屬性:__age
設定值(__age):
def setage(self,age):
self.__age = age
獲取值(__age):
def getage(self):
return self.__age
演示封裝性的使用--->屬性的封裝與隱藏(私有化)
classperson:
def__init__
(self,name,age,money):
self.name=name
self.
__age=age
self.
__money=money
'''提供外界額外的訪問方式:getter和setter操作
'''#
設定值操作
defsetage(self,age):
#對age的內容進行合法性的校驗
if age<0 or age>130:
print('
年齡賦值有誤...')
raise exception('
年齡有誤...')
else
: self.
__age=age
#獲取值操作
defgetage(self):
return self.__age
defsetmoney(self,money):
#...
self.__money=money
defgetmoney(self):
return self.__money
#例項化person物件
p=person('
老王',30,30000)
#print(p.name,p.age,p.money)
物件例項化之後,可能會對屬性進行再次的訪問(賦值、獲取值),
但是在外界直接通過物件.屬性名的方式進行操作,很有可能造成資料與現實邏輯不符合的情況(髒資料),
我們是需要避免的,那麼該怎麼辦呢?
我們就將物件訪問屬性的行為沒收(限制),可以在需要的屬性前定義__來實現私有化
之後可以提供外界額外的訪問方式:一套getter和setter函式即可
p.age=-30print(p.age)
以下操作並不是嘗試修改私有屬性,而且為物件動態新增屬性的行為
p.__age=-30print(p.__age)
__dict__屬性:
作用:返回物件的屬性名(鍵),屬性值(value),以字典形式返回
從中我們可以看出,被所謂私有化的屬性其實就是換了個名字(偽私有),
命名的規則:_類名__屬性名,
雖然我們也是可以在外界去訪問它,但是一般人都不這麼幹(帥的人)
print(p.__dict__)p._person_age=100
print(p.__dict__
)p.setage(-100)
(p.getage())
print(p.__dict__)
返回目錄
LeetCode第四十三題 Python實現
title leetcode no.43 categories tags 給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 45...
左耳聽風 第四十三周
每週完成乙個arts 每週至少做乙個 leetcode 的演算法題 閱讀並點評至少一篇英文技術文章 學習至少乙個技術技巧 分享一篇有觀點和思考的技術文章。也就是 algorithm review tip share 簡稱arts leetcode229.求眾數 leetcode235.二叉搜尋樹的最...
韓順平網頁設計第四十三講
cleartimeout 用法案例 window物件還有如下方法 moveto的作用是把視窗的左上角移動到乙個指定的座標。案例如下 function test2 我是乙個視窗 moveby 是以當前視窗為起點移動座標。moveto 100,100 相對螢幕左上角 moveby 100,100 相對當...