物件導向的三大特徵 之封裝 python版

2021-10-07 06:20:10 字數 2845 閱讀 3324

物件導向有三大特點:封裝 繼承 多型

真的很像乙個有錢人的生活,乙個巨有錢的人的生活。

他追求的生活是 安全 繼承權 通吃……

封裝就是保證安全性,別人不能隨意打擾他,要接觸他需要有特殊的許可

繼承:他繼承了大筆的遺產或者非遺產,自己也會留下遺產給負二代

多型:多人運動了解一下……在不同人面前有不同的臉……當然不是啦,而是這個人隨和,對所有人都通吃,許多人都可以靠他解決乙個問題。

瞎扯到此結束,因為我不是有錢人,我理解的有錢人也就這水平。

但是封裝並不是完全封死,封裝更像是包裝,比如快遞外面的快遞盒或者袋子,封死就是乙個鐵皮盒子,打不開的

class

car:

def__init__

(self,name,value)

:#self.name = name

#self.myname = name

#self.__name = name

self._name = name

self._value = value

defrun(self)

:#print(self.myname,"開始跑了!")

print

(self._name,

"開始跑了!"

)def

getname

(self)

:return self._name

defsetname

(self,name)

: self._name = name

defgetvalue

(self)

:print

(self._value)

return self._value

defsetvalue

(self,value)

:if value>

10000

: self._value = value

a = car(

'大奔'

,100000

)#a.name = 'tesila'

#a.#p._person__name = '1111'

#a.__person__name = '1111'

#a.__name = '1111' 這樣是不管用的,

##a._person__name = '1111' 這樣才管用

#a._name = '1111'

a.run(

)a.getvalue(

)a.setvalue(

5000

)a.getvalue(

)

輸出結果:

大奔 開始跑了!

100000

100000

如果為20000時,則可以重新賦予價值

class

person

:def

__init__

(self,name)

: self._name = name

#getter

@property

defname

(self)

:print

('get 方法執行了啊'

)return self._name

p = person(

'葫蘆娃'

)#print(p.name())

print

(p.name)

執行的結果是:可以通過p.name,通過呼叫方法的方式,將方法變成屬性,呼叫的是getter方法

此時p.name表示的是p的乙個屬性了,這個屬性是唯讀的

p.name='1111』這樣是會報錯的

但是p._name=『1111』是不會報錯的,而且是可以成功修改name值的

因為p._name 並不是p的屬性,而p.name 是p的屬性

所以說可以防止屬性被修改的意思是防止屬性通過p.name的方式被修改

那麼我們想,如果把_name修改為name這樣的話,是不是就可以徹底防止被修改了啊?

當然不是了啊,這樣的話,因為name方法已經轉化為屬性了,目前在初始化中又定義了乙個name屬性,這樣的程式當然是會報錯的啊

property這個裝飾器的作用就是可以把方法轉化為同名的屬性,這個就是真的屬性,而且是唯讀屬性

那麼這個name的值,就不能直接修改了嗎?其實我們可以通過在類中定義乙個setter來實現將唯讀變為非唯讀

具體**如下:

class

person

:def

__init__

(self,name)

: self._name = name

#getter

@property

defname

(self)

:print

('get 方法執行了啊'

)return self._name

@name.setter

defname

(self,name)

:print

('set 方法執行了啊'

) self._name = name

p = person(

'葫蘆娃'

)#print(p.name())

print

(p.name)

#p.name = '1111'

p.name =

'1111'

#p.name = '1111'

print

(p.name)

property裝飾器,我想我明白了,這真的是個好用的工具啊!

物件導向三大特徵之封裝

上半句 下半句。三流的書籍和部落格只會告訴你上半句,因為它們的作者自己也不知道下半句,而讓我們接近真理,走的更遠的是下半句。並且下半句往往非常簡單。上半句就是一些半吊子挖出的天坑,就算下半句非常簡單。因為上半句的誤導產生的阻礙,讓無數人很多年也接觸不到講述真理的下半句。時刻警醒 我們要學習的是講述真...

物件導向三大特徵之封裝

將屬性封裝起來,不讓外部直接訪問 提供getset方法訪問 package com.lv.am 資料的封裝 資料的實體類物件 除了這個商品的物件 我們還有什麼現實生活中也是這樣來定義乙個實體類 public class goods public void setname string name pu...

物件導向三大特徵 封裝

一 封裝 1 程式的問題 無法保證資料的安全性,同時也無法保證資料的有效性。二 封裝的要求 1 private 私有的,被private修飾的內容只能在類的內部使用public 公開的 2 為私有的屬性提供公開的get set方法。a為屬性賦值 set方法 public void set屬性名 資料...