上一節(jié)課提到,私有屬性沒有辦法從外部訪問,只能在類的內(nèi)部操作;那如果外部需要操作私有屬性怎么辦?這個(gè)時(shí)候可以通過定義類或者實(shí)例的方法來操作私有屬性,本節(jié)課先來介紹實(shí)例方法。
實(shí)例的方法指的就是在類中定義的函數(shù),實(shí)例方法的第一個(gè)參數(shù)永遠(yuǎn)都是self,self是一個(gè)引用,指向調(diào)用該方法的實(shí)例對象本身,除此以外,其他參數(shù)和普通函數(shù)是完全一樣的。
class Person(object): def __init__(self, name): self.__name = name def get_name(self): return self.__name
在上面的定義,name是實(shí)例的私有屬性,從外部是無法訪問的,而get_name(self) 就是一個(gè)實(shí)例方法,在實(shí)例方法里面是可以操作私有屬性的,注意,它的第一個(gè)參數(shù)是self。
另外,__init__(self, name)其實(shí)也可看做是一個(gè)特殊的實(shí)例方法。
通過定義get_name(self)方法,在外部就可以通過這個(gè)方法訪問私有屬性了。
?p = Person('Alice') print(p.get_name()) # ==> Alice
注意,在外部調(diào)用實(shí)例方法時(shí),是不需要顯式傳遞self參數(shù)的。
另外,通過定義實(shí)例方法來操作私有屬性的這種方法是推薦的,這種數(shù)據(jù)封裝的形式除了能保護(hù)內(nèi)部數(shù)據(jù)一致性外,還可以簡化外部調(diào)用的難度。
當(dāng)然,實(shí)例方法并不僅僅是為私有屬性服務(wù)的,我們可以把和類的實(shí)例有關(guān)的操作都抽象成實(shí)例方法,比如:打印實(shí)例的詳細(xì)信息等等。
class Animal(object): def __init__(self, name, age, localtion): self.name = name self.age = age self.localtion = localtion def get_info(self): return 'name = {}, age = {}, localtion = {}'.format(self.name, self.age, self.localtion) dog = Animal('wangwang', 1, 'GuangDong') print(dog.get_info())
把Animal類的age、name、localtion定義成私有屬性,并定義對應(yīng)的方法修改和獲取他們的值。
參考答案:
class Animal(object): def __init__(self, name, age, localtion): self.__name = name self.__age = age self.__localtion = localtion def set_name(self, name): self.__name = name def get_name(self): return self.__name def set_age(self, age): self.__age = age def get_age(self): return self.__age def set_localtion(self, localtion): self.__localtion =localtion def get_localtion(self): return self.__localtion
請驗(yàn)證,完成請求
由于請求次數(shù)過多,請先驗(yàn)證,完成再次請求
打開微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報(bào)