1. 程式人生 > >【Python】self的用法掃盲

【Python】self的用法掃盲

現在 使用 內置 匹配 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的用法掃盲