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__裡的內容
執行結果: