1. 程式人生 > >python中的self理解

python中的self理解

前言

先介紹下類和例項

面向物件最重要的概念就是類(class)和例項(instance),類時抽象的模板,比如學生這個抽象的事物,可以用一個student類來表示。而例項時根據類創建出來的一個個具體的“物件”,每一個物件都從類中繼承有相同的方法,但各自的資料可能不同(根據各自的引數來定)。

1 class Student(object):
2     pass

1)定義了Student類

(object)表示該類從那個類繼承下來的,object類是所有類都會繼承的類

1 student=Student()

2)student為定義的例項,通過Student類創建出student例項,語法:建立例項是通過類名+()

1 class Student(object):
2     def __init__(self,name,score):
3         self.name =name
4         self.score = score

3)Student類起到模板的作用,在建立例項的時候,把我們認為必須繫結的屬性強制填寫進去,用到了python中的一個內建方法__init__方法;在__init__方法的第一個引數永遠是self,表示建立的類例項的本身,有了__init__方法在建立例項的時候就不能傳入空的引數,必須傳入和__init__方法匹配的引數。

1 >>>student = Student("
Hugh", 99) 2 >>>student.name 3 "Hugh" 4 >>>student.score 5 99

 

1.函式和類中的方法的區別

類中的方法必須有一個額外的第一個引數的名稱,一般就是self,呼叫這個方法時,不會為這個引數賦值,這個特別的變數就是指物件本身。

所以

類的方法一般需要新增self,而普通的方法不要新增self。

例如:

 1 class Test(object): #建立個類
 2 
 3   def add(self,a,b):#類中的方法
 4 
 5     print (a+b)
6   def display(self): 7 8     print("hello") 9 test = Test()#建立例項 10 11 test.add(1,2)#呼叫類中的方法 12 13 test.display() 14 15 #如果去掉self,會報執行錯誤 16 17 def add02(a,b):#普通的方法,不要新增self 18 19   print (a+b)

"'假如一個類稱為MyClass和這個類的一個例項MyObject。當你呼叫這個物件的方法MyObject.method(arg1, arg2)的時候,這會由Python自動轉為MyClass.method(MyObject, arg1, arg2)——這就是self的原理了"'

2.類中為何要__init__初始化

1)支援帶引數的類的初始化

2)實現類本身相關內容的初始化

當一個Class,稍微複雜一點的時候,或者內部函式需要用得到的時候,往往都需要在,別人例項化你這個類之前,使用你這個類之前,做一些基本的,與自己的類有關的,初始化方面的工作。

而這部分工作,往往就放到__init__函式中去了。