裝飾器 property的使用總結

2021-09-29 00:24:55 字數 3644 閱讀 1046

0、裝飾器的兩個方法:訪問器(getter)和修改器(setter)

1、不使用裝飾器,也不設定私人屬性,類中的屬性值可以直接修改

2、不使用裝飾器,使用單下劃線宣告為私人屬性,類中的屬性值不可以直接修改,但加上單下劃線後可以修改。

(使用單下劃線就相當於在原來的名字前面加個下劃線,換了乙個名字而已)

3、不使用裝飾器,使用雙下劃線設定為私人屬性,類中的屬性值怎麼都無法修改

4、使用裝飾器@property,使用單下劃線,不使用setter(修改器),類中的屬性將可以被訪問,但不可以被修改

5、定義了@property其實就可以被訪問了,也就是使用了setter了。

結果:屬性將可以直接修改

class

person

(object):

def __init__

(self,name,age)

: self.name = name

self.age = age

def play

(self)

:if self._age <=16:

print

("%s正在玩飛行棋"

% self._name)

else

:print

("%s什麼都沒玩"

% self._name)

def main()

: person =

person

('王大錘',12

) person.

play

() #輸出:王大錘正在玩飛行棋

#修改屬性值

person.age =

22 person.name =

'李元芳'

person.

play

() #輸出:李元芳什麼都沒玩

if __name__ ==

'__main__'

:main

()

(即外人可以訪問,但大家都是成年人了,我說這是私人的,你就不要去訪問了)

a、main函式中: 未使用單下劃線修改

–>結果:不會被修改,但也不會報錯

b、main函式中:使用單下劃線修改

–>結果:成功修改被宣告為私人屬性的值

class

person

(object):

def __init__

(self,name,age)

:#單下劃線,宣告屬性為私人

self._name = name

self._age = age

def play

(self)

:if self.__age <=16:

print

("%s正在玩飛行棋."

% self._name)

else

:print

("%s什麼都沒玩"

% self._name)

def main()

: person =

person

('王大錘',12

) person.

play

() #輸出:王大錘正在玩飛行棋.

#a、不使用單下劃線訪問修改

person.age =

22 person.name =

'李元芳'

person.

play

() #輸出:王大錘正在玩飛行棋.

#可見,程式不會報錯,也不會修改屬性值

#b、使用單下劃線訪問修改

person._age =

22 person._name =

'李元芳'

person.

play

() #輸出:李元芳什麼都沒玩.

#可見,使用單下劃線,是可以成功訪問修改被宣告為私人屬性的值的

if __name__ ==

'__main__'

:main

()

裝飾器的兩個方法:getter(訪問器)和setter(修改器)

a、使用裝飾器,使用單下劃線,不使用setter(修改器),類中的屬性將可以被訪問,但不可以被修改b

b、使用setter(修改器),類中的屬性可以被間接的修改

class

person

(object):

def __init__

(self,name,age)

: self._name = name

self._age = age

#使用裝飾器

@property

def name

(self)

:return self._name

@property

def age

(self)

:return self._age

#對name使用setter,就可以修改name的值

@age.setter

def name

(self,name)

: self._name = name

#沒有對age使用seter,將不可以修改age值

def play

(self)

:if self._age <=16:

print

("%s正在玩飛行棋."

% self._name)

else

:print

("%s正在玩鬥地主"

% self._name)

def main()

: person =

person

('王大錘',12

) person.

play

() #輸出:王大錘正在玩飛行棋.

#person.age = 22 #報錯,因為沒有使用setter修飾,所以不可以被修改

person.name =

'李元芳'

#name使用了steter修飾,所以可以被修改

person.

play

() #輸出:李元芳什麼都沒玩.

if __name__ ==

'__main__'

:main

()

0、裝飾器的兩個方法:訪問器(getter)和修改器(setter),被 @property 裝飾的方法是獲取(getter)屬性值的方法,被裝飾方法的名字會被用做 屬性名;

1、不使用裝飾器,也不設定私人屬性,類中的屬性值可以直接修改

2、不使用裝飾器,使用單下劃線宣告為私人屬性,類中的屬性值不可以直接修改,但加上但下劃線後可以修改。(使用單下劃線就相當於在原來的名字前面加個下劃線,換了乙個名字而已)

3、不使用裝飾器,使用雙下劃線設定為私人屬性,類中的屬性值怎麼都無法修改

4、使用裝飾器,使用單下劃線,使用getter(訪問器),不使用setter(修改器),類中的屬性將可以被訪問,但不可以被修改

內建裝飾器 property

使用 property 閱讀 4164 內建裝飾器 property的基本功能就是把類中的方法當作屬性來訪問 在繫結屬性時,如果我們直接把屬性暴露出去,雖然寫起來很簡單,但是,沒辦法檢查引數,導致可以把成績隨便改 s student s.score 9999這顯然不合邏輯。為了限制score的範圍,...

property裝飾器詳解

property裝飾器,看了好幾個教程都不太理解,知道發現了知乎的這篇好文python property的介紹與使用,終於懂了!下面結合github上的乙個例子,解釋一下這個裝飾器 class person object def init self,name,age 初始化 self.name na...

物件property裝飾器

class people def init self,name self.name name property defname self obj1.name return self.name name.setter defname self,val obj1.name egon iftype val...