物件導向最重要的概念就是類(class)和例項(instance),比如球類,而例項是根據類建立出來的乙個個具體的「物件」,每個物件都擁有相同的方法,但各自的資料可能不同。在python中,定義類是通過class
關鍵字:
class people(object): # 自定義乙個people類,括號內的object表示當前類繼承object類
'''this is my first object''' # 類的注釋
name = 'daxin' # 類的屬性
age = 18
def eat(self): # 類的方法
print(' eating !'.format(self.name))
ren = people() # 例項化乙個ren物件
ren.eat() # 呼叫物件的方法
object是所有類的父類,不寫的話,預設繼承object類,當然函式可以包含注釋,類也可以,在類中使用三個單引號表示注釋。
__init__ 建構函式,在生成物件時呼叫。由於類可以起到模版的作用,因此,可以在建立例項的時候,把一些我們認為必須繫結的屬性新增進去,通過定義乙個特殊的__init__方法,我們就可以在建立例項的時候,把自定義的屬性繫結上。
class people(object):
'''this is my first object'''
def __init__(self,name,age): # 類的建構函式,除了self意外的引數都需要在例項化的時候傳遞進去
self.name = name # 物件的name屬性
self.age = age # 物件的age屬性
def eat(self):
print(' eating !'.format(self.name))
ren = people('daxin',18)
ren.eat()
注意到:__init__方法的第乙個引數永遠是self,表示建立例項本身,因此,在__init__方法內部,就可以把各種屬性繫結到self,因為self指向了建立的例項本身。
當我們定義乙個class的時候,可以從某個現有的class繼承,新的class稱為子類(subclass),而被繼承的class稱為基類、父類或超類(base class、super class)。
子類具有父類的屬性和方法,還記得我們之前建立的people類嗎,它也是繼承了object類的。
class people(obejct): # 父類表示人類
pass
class yelloman(people): # 繼承了people類的黃種人
pass
class chinapeople(yelloman,people) # 同時繼承people,yelloman的中國人
pass
注意:在繼承種類的構造(__init__())方法不會自動呼叫,需要在子類的構造方法種親自呼叫
呼叫方法時,首先查詢子類的方法,如果沒有才會去父類中查詢。
通過繼承我們可以得到父類的各種屬性或者功能,但是需要注意的是父類的__init__函式不會在繼承的時候被執行, 並且如果我們想重定義父類中的某個函式,該怎麼辦呢?
class people(object):
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print(' eating !'.format(self.name))
class ren(people):
def __init__(self,name,age,***):
super(ren, self).__init__(name,age) # 使用super執行父類的__init__方法,並且傳遞name,age 給父類的init函式
self.*** = ***
def get_name(self):
return self.name
def get_age(self):
return self.age
def get_***(self):
return self.***
def eat(self): # 如果存在和父類同名的函式,會直接覆蓋父類函式
print('hello world')
a = ren('daxin',18,'men')
print(a.get_name())
print(a.get_age())
print(a.get_***())
a.eat()
類的屬性,可以稱為成員變數,類的方法,可以稱為成員函式。
建立物件的過程稱之為例項化:當乙個物件被建立後,包含三個方面的特性:物件控制代碼、屬性和方法。
控制代碼用於區分不同的物件(例項化出來的物件的名稱可以稱之為控制代碼)
物件的屬性和方法與類中的成員變數和成員函式對應
obj = myclass() # 建立類的乙個例項(物件)
# 通過物件來呼叫方法和屬性
類的屬性按照使用範圍分為共有屬性和私有屬性,類的屬性範圍取決於屬性的名稱。
- 共有屬性:在類中和類外都能呼叫的屬性
- 私有屬性:不能在類外呼叫的屬性
定義方式:以'__'雙下滑線開始的成員變數就是私有屬性
- 可以通過instance._classname__attribute方式訪問
- 內建屬性:由系統在定義類的時候預設新增的,又前後雙下劃線構成,(__dict__,__module__)
例子:
class people(object):
color = 'yellow'
__age = 30
def say(self):
self.color = 'back'
print self.color
print self.__age
ren = people()
ren.say()
ren.color = 'white' ②
ren.__dict__
people.__dict__ ③
ren.__age ①
# ①:由於__age是內部變數 ,所以無法在class外部呼叫,我們一般把類的私有屬性,在類的成員函式中呼叫,這樣我們就可以在外部來呼叫類的成員函式來呼叫內部變數,或者使用ren._people__age注意累的名字前要加_,一般只在測試用!
# ② 通過例項化的物件,我們就可以去修改物件的屬性,但是不會影響類的成員屬性
# ③ __dict__內建函式,通過物件呼叫它,會把成員函式中的變數,以字典的形式儲存,如果通過類呼叫它,它會列出類中的所有執行過程中產生的變數,並且以字典儲存。
既以__開頭,以__結尾的方法,稱之為內建方法
1、__str__
用於類被例項化後,直接列印例項化物件時,顯示的提示資訊,注意,這裡必須要用return
def __str__(self):
return 'this is people object'
2、建構函式 __init__
用於初始化類的內部狀態
def __init__(self,name,age): -->可以新增引數
self.name = name
self.age = age --> 初始化的時候,自動賦值的屬性
self.talk() -->可以在初始化的時候,直接執行某些方法,用於在例項化的時候,自動執行
3、析構函式 __del__
用於釋放物件占用的資源,在指令碼執行完畢後,自動進行資源釋放(比如在建構函式中開啟了某些檔案,那麼就可以在析構函式中關閉這些檔案)
def __del__(self):
print('bye bye')
posted @
2017-11-06 21:38
dahlhin 閱讀(
...)
編輯收藏
Python小白學習筆記 day7
第七章 python檔案和資料格式化 學習筆記 對檔案操作完成後即使不關閉程式也不會報錯,所以可以不關閉檔案 將乙個檔案與程式中的物件關聯起來的過程,稱為檔案開啟 csv檔案的特點 1.非二進位制檔案,而是純文字格式,通過單一編碼標識字元 2.以行為單位,開頭不留空行,行之間沒有空行 3.每行表示乙...
Python全棧學習筆記day 7
lis 11,22,33,44,55 for i in range len lis print i del lis i print lis 刪除奇數字 第一種lis lis 2 print lis 第二種l1 for i in lis if lis.index i 2 0 lis l1 print ...
python學習筆記 day7筆記
一 模組相關 匯入模組 1 import xx import模組實質就是把這個python檔案從頭到尾執行一遍 2 import模組查詢模組的順序 先從當前模組下查詢,如果當前目錄沒找到就從sys.path裡找,以上兩個目錄都找不到,那就報錯 二 redis操作 excel redis 關係型資料庫...