【Python】self的用法掃盲
阿新 • • 發佈:2018-04-04
現在 使用 內置 匹配 body 參數 IT ini 是把
在Python中,我們有兩個重要的概念:類與實例
例如:我們在現實生活中人就是一個類,實例就是具體到某一個男人(張三、李四等)
1.類:定義人這個類
class People(object):
pass
2.實例:創建實例是通過類名+()實現
people1 = People()
3.類就像一個模板一樣,我們現在在這個模板上加一些屬性:age,name,使用內置方法__init__方法
class People(object): def __init__(self,name,age): self.name = name self.age = age
說明:①__init__方法的第一個參數永遠是self,表示創建的類實例本身,在__init__內部就可以把各種屬性都綁定到self,self就指向創建的實例本身 ②有了__init__方法就不能傳入空的參數了,必須傳入與__init__方法匹配的參數,但self不需要傳入
#-*- coding:utf-8 -*- class People(object): def __init__(self,name,age): self.name = name self.age = age people1 = People(‘Jack‘,23) print(people1.name) #運行結果:Jack print(people1.age) #運行結果:23
這裏的self是指類本身,self.name就是類People的屬性變量,是People所有。name是外部傳來的參數,不是People自帶的。self.name = name的意思是把外部傳來的參數賦給People自己的屬性變量self.name
4.在類中定義函數時,第一參數永遠是類的本身實例變量self,傳遞參數時不需要傳遞該參數
5.類實例本身就有這些數據,那麽要訪問這些數據,就沒必要從外部訪問,直接在類中定義訪問數據的函數,這樣,就可以把數據“封裝”起來
#-*- coding:utf-8 -*- class People(object): def __init__(self,name,age): self.name = name self.age = age def print_age(self): print("%s:%s" %(self.name,self.age)) people1 = People(‘Jack‘,23) people1.print_age() #運行結果:Jack:23這些邏輯被封裝起來了,調用起來相對容易些,但卻不知道內部實現的細節。
6.如果要讓內部屬性不被外部訪問,那麽只需要加兩個下劃線,就變成了私有變量,只有內部可以訪問,外部無法訪問。
#-*- coding:utf-8 -*- class People(object): def __init__(self,name,age): self.__name = name self.__age = age def print_age(self): print("%s:%s" %(self.__name,self.__age)) people1 = People(‘Jack‘,23) people1.print_age() #運行結果:Jack:23使用外部訪問試試
#-*- coding:utf-8 -*- class People(object): def __init__(self,name,age): self.__name = name self.__age = age def print_age(self): print("%s:%s" %(self.__name,self.__age)) people1 = People(‘Jack‘,23) people1.name #報錯:‘People‘ object has no attribute ‘name‘ people1.__name #報錯:‘People‘ object has no attribute ‘__name‘
【Python】self的用法掃盲