Python面向對象之類和實例

1.類的定義
	定義是用過class關鍵字
		class Student(object):
			pass
	class 後面緊接着是類名,即Student,類名一般是大寫開頭的單詞,
	緊接着是(object),表示該類是從哪一個類繼承下來的。若是沒有合適
	的繼承類,就使用object類,這個是全部類最終都會繼承的類。

	定義好了Student類,就能夠根據Student類建立出Student的實例,
	建立實例是經過類名+()實現的

	res = Student()
	print(res)#<__main__.Student object at 0x1035d35c0>
	print(Student)#<class '__main__.Student'>

	能夠看到,res指向的是一個Student實例,而Student本省則是一個類。

	能夠自由的給實例變量綁定屬性,eg. 給res綁定一個name屬性
	res.name = 'Jake'
	print(res.name)#Jake

	因爲類能夠起到模板的做用,所以,能夠在建立實例的時候,把一些咱們
	認爲必須綁定的屬性強制填寫進去,經過定義一個特殊的__init__方法
	在建立實例的時候,把name,age,sex等屬性綁定上去。
	    def __init__(self, name, age, sex):
	        self.name = name
	        self.age = age
	        self.sex =sex
	    注:__init__是雙下劃線

	注意:
		__init__方法第一個參數永遠是,self。表示建立的實例自己,
		所以,在__init__方法內部,就能夠把各類屬性綁定到self,
		所以,self就指向建立的實例自己。
		有了__init__方法,在建立實例的時候,就不能傳入空的參數了
		必須傳入與__init__方法匹配的參數,但self不須要傳,Python
		解釋器本身會把實例變量傳進去。

		res = Student('Jake', 60, '男')
		print(res.age)#60

	和普通方法相比,在類中定義的函數只有一點不一樣,就是第一個參數永遠
	都是self,而且調用時,不用傳遞參數。除此以外,與類的方法與普通方
	法沒有什麼區別。

	總結:
		__dict__ : 可查詢類和對象中內容,並以字典形式返回。

		1.類名+() ---->實例化一個對象
		2.這個時候會自動執行__init__方法,而且將對象傳給__init__的self參數
		3.給對象封裝相應的屬性。

2.數據封裝
	面向對象編程的一個重要的特色就是數據封裝。
	在上面的Student類中,每一個實例都擁有各自的name,age,sex這些數據。
	既然Student實例自己就擁有這些數據,要訪問這些數據,就沒有必要從
	外面的函數去訪問,能夠直接在Student類的內部定義訪問數據的函數,
	這樣,就把「數據」給封裝起來了。這些封裝數據的函數是和Student類本
	身是關聯起來的,咱們稱之爲類的方法:

	class Student(object):
	    def __init__(self, name, age, sex):
	        self.name = name
	        self.age = age
	        self.sex =sex

	    def print_message(self):
	        print('%s:%s:%s' % (self.name, self.age, self.sex))

	res = Student('Jake', 60, '男')
	res.print_message()#Jake:60:男

	這樣一來,咱們從外部看Student類,就只須要知道,建立實例須要給出name,age,sex
	而如何打印,都是在Student類的內部定義的,這些數據和邏輯被「封裝」起來了,調用很
	容易,但卻不用知道內部實現的細節。封裝的另外一個好處就是,能夠給Student類增長新
	的方法。

	總結:
		1.類是建立實例的模板,而實例則是一個一個具體的對象,各個實例擁有的數據都是
		互相獨立的,互不影響。
		2.方法就是與實例綁定的函數,和普通函數不一樣,方法能夠直接返回實例的數據。
		3.Python容許對實例變量綁定任何數據,也就是說,對於兩個實例變量,雖然他們
		都是同一類的不一樣實例,但擁有的變量名稱均可能不一樣。
相關文章
相關標籤/搜索