Python 類的 self

self

    self只有在類的方法中才會有,獨立的函數和方法裏面是沒有的,在定義類的時候 python 是強制聲明 self 的,不過在實例化以後調用時能夠不用傳入相應的參數,self 不是 python 的關鍵字,只是約定俗成的,把 self 換成別的也是能夠的。python

    self 是指類實例對象自己,不是類自己,即類實例化以後的對象。數據結構

    高級語言的類相似於 C 語言的結構體,C 語言的結構體定義了特定的數據結構,而高級語言的類則在結構體上更進了一步,將函數的功能也放了進去,也就是動態的數據結構,固然跟結構體同樣,聲明的時候自己是不會建立內存空間的,結構體只有在聲明給變量以後纔會在內存中建立實際地址,類也是同樣的,須要實例化纔對應實際的內存空間。函數

 

Class

    因爲類是抽象的模板,那麼就能夠在建立實例的時候,把必須綁定的屬性強制加入其中,Python 提供一個特殊的 __init__ 方法,在建立實例的時候,把須要的屬性添加進去。spa

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

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

    這樣在實例化的時候,就須要傳入 name 和 age 兩個屬性了code

b = student('Alan', 24)

     有了 __init__ 方法,在建立實例的時候,就不能傳入空的參數了,必須傳入與 __init__ 方法匹配的參數,但 self 不須要傳,Python解釋器本身會把實例變量傳進去,在類中定義的函數只有一點不一樣,就是第一個參數永遠是實例變量 self,可是在調用的時候,不用傳入 self 參數。對象

 

數據封裝

    面嚮對象語言中,有一個特定是數據封裝,例如上面的 student 類中,後續實例化的實例中都會擁有 name 和 age 兩個數據,就能夠經過外部函數來訪問這些數據了:內存

def print_age(std):
    print('%s :%s' % (std.name, std.age)

bart = student('Alan', 24)
print_age(bart)

    既然 student 實例自己擁有這些數據,那麼想要訪問這些數據,就沒有必要在外部聲明函數來訪問,能夠直接在 student 內部定義訪問數據的函數,這樣就把數據「封裝」起來了,這些封裝數據的函數和 student 類自己是關聯起來的,稱之爲類的方法----不一樣於 C 語言結構體的地方,C 語言的結構體並無把數據封裝起來。it

相關文章
相關標籤/搜索