(一)Python入門-6面向對象編程:02類的定義-類和對象的關係-構造函數-實例屬性-實例方法

一:類的定義

  若是把對象比做一個「餅乾」,類就是製造這個餅乾的「模具」。ssh

  咱們經過類定義數據類型的屬性(數據)和方法(行爲),也就是說,「類將行爲和狀態打 包在一塊兒」。ide

     

  對象是類的具體實體,通常稱爲「類的實例」。類看作「餅乾模具」,對象就是根據這個「模 具」製造出的「餅乾」。函數

  從一個類建立對象時,每一個對象會共享這個類的行爲(類中定義的方法),但會有本身的屬 性值(不共享狀態)。更具體一點:「方法代碼是共享的,屬性數據不共享」。this

    

  Python中,「一切皆對象」。類也稱爲「類對象」,類的實例也稱爲「實例對象」。spa

  定義類的語法格式以下:指針

    class 類名:code

      類體orm

  要點以下:對象

    1. 類名必須符合「標識符」的規則;通常規定,首字母大寫,多個單詞使用「駝峯原則」。blog

    2. 類體中咱們能夠定義屬性和方法。

    3. 屬性用來描述數據,方法(即函數)用來描述這些數據相關的操做。

【操做】一個典型的類的定義

#類的定義
class Student:   #類名通常首字母大寫,多個單詞采用駝峯規則

    def __init__(self,name,score):    #self必需要有,必須位於第一個參數
        self.name = name
        self.score = score

    def say_score(self):     #self必需要有,必須位於第一個參數
        print('姓名是:{0},分數是:{1}'.format(self.name,self.score))

s1 = Student('jack','100')    #經過類名()調用構造函數
s1.say_score()

#其餘操做
print(dir(s1))   #得到對象的全部屬性、方法
print(s1.__dict__)    #對象的屬性字典
class Man:
    pass    #空語句
print(isinstance(s1,Student))     #判斷「對象」是否是「指定類型」
print(isinstance(s1,Man))

運行結果:

  姓名是:jack,分數是:100
  ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'say_score', 'score']
  {'name': 'jack', 'score': '100'}
  True
  False

二:__init__構造方法和__new__方法

  類是抽象的,也稱之爲「對象的模板」。咱們須要經過類這個模板,建立類的實例對象,然 後才能使用類定義的功能。

  過一個 Python 對象包含三個部分:id(identity 識別碼)、type(對象類型)、 value(對象的值)。
  如今,咱們能夠更進一步的說,一個 Python 對象包含以下部分:

    1. id(identity 識別碼)

    2. type(對象類型)

    3. value(對象的值)

      (1) 屬性(attribute)

       (2) 方法(method)

  建立對象,咱們須要定義構造函數__init__()方法。構造方法用於執行「實例對象的初始化工 做」,即對象建立後,初始化當前對象的相關屬性,無返回值。

  __init__()的要點以下:

    1. 名稱固定,必須爲:__init__()

    2. 第一個參數固定,必須爲:self。 self指的就是剛剛建立好的實例對象。

    3. 構造函數一般用來初始化實例對象的實例屬性,以下代碼就是初始化實例屬性:name 和score。

        def __init__(self,name,score):

          self.name = name       #實例屬性

          self.score = score

    4. 經過「類名(參數列表)」來調用構造函數。調用後,將建立好的對象返回給相應的變量。 好比:s1 = Student('張三', 80)

    5. __init__()方法:初始化建立好的對象,初始化指的是:「給實例屬性賦值」

    6. __new__()方法: 用於建立對象,但咱們通常無需重定義該方法。

    7. 若是咱們不定義__init__方法,系統會提供一個默認的__init__方法。若是咱們定義了帶參 的__init__方法,系統不建立默認的__init__方法。

    注:Python中的self 至關於C++中的 self 指針, JAVA和C#中的this 關鍵字。Python 中self必須爲構造函數的第一個參數,名字能夠任意修改。但通常遵照慣例,都叫作 self。

三:實例屬性和實例方法

  (一)實例屬性:

    實例屬性是從屬於實例對象的屬性,也稱爲「實例變量」。他的使用有以下幾個要點:

      1. 實例屬性通常在__init__()方法中經過以下代碼定義:

          self.實例屬性名 = 初始值

      2. 在本類的其餘實例方法中,也是經過self 進行訪問:

          self.實例屬性名

      3. 建立實例對象後,經過實例對象訪問:

          obj01 = 類名()                     #建立對象,調用__init__()初始化屬性

          obj01.實例屬性名 = 值        #能夠給已有屬性賦值,也能夠新加屬性

  (二)實例方法:

    實例方法是從屬於實例對象的方法。實例方法的定義格式以下:

      def 方法名(self [, 形參列表]):

        函數體

    方法的調用格式以下:

      對象.方法名([實參列表])

    要點:

      1. 定義實例方法時,第一個參數必須爲self。和前面同樣,self 指當前的實例對象。

      2. 調用實例方法時,不須要也不能給self 傳參。self 由解釋器自動傳參。

    函數和方法的區別:

      1. 都是用來完成一個功能的語句塊,本質同樣。

      2. 方法調用時,經過對象來調用。方法從屬於特定實例對象,普通函數沒有這個特色。

      3. 直觀上看,方法定義時須要傳遞self,函數不須要。

    實例對象的方法調用本質:

      

     其餘操做:

      1. dir(obj)能夠得到對象的全部屬性、方法

      2. obj.__dict__ 對象的屬性字典

      3. pass 空語句

      4. isinstance(對象,類型) 判斷「對象」是否是「指定類型」

相關文章
相關標籤/搜索