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