1. 程式人生 > >python之類的有關概念,初始化方法,內建方法

python之類的有關概念,初始化方法,內建方法

1.面向物件

概述:

        面向過程的程式設計把計算機程式視為一系列的命令集合,即一組函式的順序執行。為了簡化程式設計,面向過程把函式繼續切分為子函式,即把大塊函式通過切割成小塊函式來降低系統的複雜度。而面向物件的程式設計把計算機程式視為一組物件的集合,而每個物件都可以接收其他物件發過來的訊息,並處理這些訊息,計算機程式的執行就是一系列訊息在各個物件之間傳遞。在Python中,所有資料型別都可以視為物件,當然也可以自定義物件。自定義的物件資料型別就是面向物件中的類(Class)的概念。

 1.類的設計

在程式開發中,要設計一個類,通常需要滿足以下三個需求:

(1).類名:這類事物的名字,滿足大駝峰命名法

(2).屬性:這類事物具有的特徵

(3).方法:這類事物的行為(動作)

例1.

小明今年18歲,身高1.75,每天早上也要跑步,會去吃東西

小美今年16歲,身高1.65,每天不跑步,喜歡吃東西

Person()    #類名

name        #屬性

age

height

run()       #方法

eat()

例2.

一隻黃色的狗狗叫大黃

看見生人旺旺叫

看見家人搖尾巴

Dog()       #類名

name        #屬性

color

shout()     #方法

shark()

經典類與舊式類:

        經典式類(基類):   帶有object  例如:class A(object)

        舊式類(經典類): 沒有object  例如:class A()

 2.定義只包含方法的類

語法格式:

class  類名():

       def 方法1(self,引數列表):

           pass

       def 方法2(self,引數列表):

           pass

       ......

 3.建立類物件

語法格式:

  物件變數 = 類名()

例項:

需求:小貓愛吃魚,小貓要喝水

程式碼1:

# 定義貓類

class Cat():

    def eat(self):

        print '小貓愛吃魚'

    def drink(self):

        print '小貓要喝水'

# 建立貓物件

tom = Cat()

tom.eat()

tom.drink()

print tom    # 輸出的物件變數儲存的地址

addr = id(tom)

print '%x' % addr   # %x 列印格式為十六進位制

print '%d' % addr   # %d 列印格式為十進位制

執行結果:

程式碼2:

class Cat():

    def eat(self):

        print '小貓愛吃魚'

    def drink(self):

        print '小貓要喝水'

# 建立貓物件

tom = Cat()

tom.eat()

tom.drink()

print tom          # 輸出的物件變數儲存的地址

#再建立一個貓物件

hellokitty = Cat()

hellokitty.eat()

hellokitty.drink()

print  hellokitty  # 用同一個類建立的兩個不同的物件,其儲存地址不同

# 建立一個與 tom 相同的貓物件

lazy_cat = tom

print lazy_cat     # lazy_cat 與 tom 的儲存地址相同

執行結果:

程式碼3:

# 定義貓類

class Cat():

    # 哪一個物件呼叫的方法,self就是哪一個物件的引用

    def eat(self):

        print '%s愛吃魚' % self.name

    def drink(self):

        print '%s要喝水' % self.name

# 建立貓物件

tom = Cat()

# 定義貓的屬性:名字(此方法並不常用)

tom.name = 'tom'

tom.eat()

tom.drink()

print tom  # 輸出的物件變數儲存的地址

執行結果:

2.初始化方法(定義屬性)

當使用類名()建立物件時,python的直譯器便會自動執行以下操作:

 1.為物件在記憶體中分配空間---建立物件

 2.呼叫初始化方法為物件的屬性設定初始值---初始化方法(__init__)

初始化方法:

  即為__init__方法,它是面向物件的內建方法,也是專門用來定義一個類具有那些“屬性”的方法

語法格式:

 1.簡單格式(初始值為定值)

def __init__(self):

    self.屬性名 = 屬性初始值

 2.帶有引數(列表)的格式(初始值可自行給定)

def __init__(self,引數1,引數2...):

    self.屬性名1 = '名字1'

    self.屬性名2 = '名字2'

    .....

呼叫方法 格式:

                          物件變數.方法名()

呼叫屬性 格式:

                          print 物件變數.屬性名()

程式碼:

class Cat():

    # 初始化方法定義屬性(初始值為定值情形)

    def __init__(self):

        self.name = 'tom'

    #在類中,任何方法都可以使用self.name

    def eat(self):

        print '%s喜歡吃魚' % self.name

tom = Cat()

print tom.name

tom.eat()

執行結果:

3.內建方法

(1) __del__方法

在python中,當使用類名()建立物件時,為物件分配完空間後,會自動呼叫__init__方法

當一個物件被從記憶體中銷燬前,會自動呼叫__del__方法

程式碼:

class Cat():

    def __init__(self,new_name):

        self.name = new_name

        print '%s來了' % self.name

    def __del__(self):

        print '%s走了' % self.name

tom = Cat('tom')

print tom.name

# del tom

print '*' * 50

執行結果:

(2)__str__方法

   在python中,使用python輸出物件變數,預設情況下,會輸出這個變數引用的物件是由哪一個類建立的物件,以及在記憶體中的地址(預設是16進位制)

   如果在開發中,希望使用print輸出物件變數時,能夠列印自定義的內容,就可以利用__str__這個內建方法

程式碼:

class Cat():

    def __init__(self,name):

        self.name = name

    def __str__(self):

        # 必須返回一個字串

        return '我是%s' % self.name

tom = Cat('tom')

print tom  # 輸出的是__str__裡的內容

執行結果:

​​​