python訪問限制及例項方法 類方法

2021-10-21 11:10:10 字數 3672 閱讀 2000

私有屬性是以**雙下劃線』__』**開頭的屬性。

在外部訪問私有屬性將會丟擲異常,提示沒有這個屬性。

雖然私有屬性無法從外部訪問,但是,從類的內部是可以訪問的。私有屬性是為了保護類或例項屬性不被外部汙染而設計的。

更多私有屬性的讀取修改參考新增鏈結描述

lass person(

object):

def__init__

(self, name, ***, age)

: self.__name = name

self.__*** = ***

self.__age = age

defget_name

(self)

:return self.__name

defset_name

(self, name)

: self.__name = name

defget_***

(self)

:return self.__***

defset_***

(self, ***)

: self.__*** = ***

defget_age

(self)

:return self.__age

defset_age

(self, age)

: self.__age = age

defget_info

(self)

:print

(self.get_name(

), self.get_***(

), self.get_age())

xiaoming = person(

'xiaoming'

,'m',20

)xiaoming.set_age(18)

xiaoming.get_info(

)輸出-

->xiaoming m 18

例項的方法指的就是在類中定義的函式,例項方法的第乙個引數永遠都是self,self是乙個引用,指向呼叫該方法的例項物件本身,除此以外,其他引數和普通函式是完全一樣的。

在外部呼叫例項方法時,是不需要顯式傳遞self引數的。另外,通過定義例項方法來操作私有屬性的這種方法是推薦的,這種資料封裝的形式除了能保護內部資料一致性外,還可以簡化外部呼叫的難度。當然,例項方法並不僅僅是為私有屬性服務的,我們可以把和類的例項有關的操作都抽象成例項方法,比如:列印例項的詳細資訊等等。

為了操作例項物件的私有屬性,我們定義了例項方法;同樣的,如果需要需要操作類的私有屬性,則應該定義類的方法。

class

person

(object):

__count =

0def

__init__

(self, name, ***, age)

: self.name = name

self.*** = ***

self.age = age

person.__count +=

1print

("%i"

%(person.__count)

)'''@classmethod:類方法的標誌'''

@classmethod

defgetcount

(cls)

:return cls.__count

@classmethod

defsetcount

(cls, count)

: cls.__count = count

defget_count

(self)

:return self.__count

defset_count

(self, count)

: self.__count = count

xiaoming = person(

'xiaoming'

,'m',18

)xin = person(

'xin'

,'f',18

)print

(xiaoming.name, xiaoming.***, xiaoming.age)

print

(xin.name, xin.***, xin.age)

##下面這一行屬於例項物件通過呼叫例項方法使用私有屬性

xin.set_count(3)

print

("the number of objects is %i"

%(xin.get_count())

)print

("the number of objects is %i"

%(xiaoming.get_count())

)print

("the number of objects is %i"

%(xin.getcount())

)print

("the number of objects is %i"

%(xiaoming.getcount())

)'''注釋的這一行執行報錯,說明例項物件方法只能由例項物件呼叫,但是類方法既可以被類呼叫也可以被例項物件呼叫。'''

# print("the number of objects is %i" % (person.get_count()))

print

("the number of objects is %i"

%(person.getcount())

)print

("類通過類方法使用私有屬性"

)person.setcount(5)

print

("the number of objects is %i"

%(xin.get_count())

)print

("the number of objects is %i"

%(xiaoming.get_count())

)print

("the number of objects is %i"

%(xin.getcount())

)print

("the number of objects is %i"

%(xiaoming.getcount())

)print

("the number of objects is %i"

%(person.getcount())

)

輸出:

由結果看出,通過例項方法使用類私有屬性,與通過例項方法使用例項物件私有屬性效果一樣。如果例項物件沒有通過例項方法修改類私有屬性,則例項物件獲取的類私有屬性的值就是該類獲取的類私有屬性的值

和例項方法不同的是,這裡有兩點需要特別注意:

1.類方法需要使用@classmethod來標記為類方法,否則定義的還是例項方法

2.類方法的第乙個引數將傳入類本身,通常將引數名命名為 cls,上面的 cls.__localtion 實際上相當於person.__localtion。

因為是在類上呼叫,而非例項上呼叫,因此類方法無法獲得任何例項變數,只能獲得類的引用

python科技限制 python 訪問限制

class person object def run self print self.money print run def eat self,food print eat food def init self,name,age,height,weight,money self.name name...

Python訪問限制

我們可以給乙個例項繫結很多屬性,如果有些屬性不希望被外部訪問到怎麼辦?python對屬性許可權的控制是通過屬性名來實現的,如果乙個屬性由雙下劃線開頭 該屬性就無法被外部訪問。看例子 class person object def init self,name self.name name self....

Python 訪問限制

內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線 在python中,例項的變數名如果以 開頭,就變成了乙個私有變數 private 只有內部可以訪問,外部不能訪問 class student object def init self,name,score self.name name self...