摘要:面向對象最重要的概念應該就是類和實例了。記得以前學習的時候,有一個比較簡單的例子來解釋類和實例。構造函數類中可以定義一個構造函數。構造函數的意思就是類在創建的時候會執行的函數。在實例中通過構造函數添加的或者在類外動態添加的屬性可以。
面向對象最重要的概念應該就是類(class)和實例(instance)了。記得以前學習java的時候,有一個比較簡單的例子來解釋類和實例。
在汽車制造過程中,我們需要先設計圖紙,讓后再根據圖紙來制造實際的汽車。類就相當于圖紙,而實例則是實際的汽車。一張圖紙可以造出很多汽車,剛造出的汽車是一樣的,但是后續可以進行個性化的改裝。
python可以根據class在內存中創建多個實例,每個實例可以獨立地添加和修改方法和屬性。
class Car(Vehicle): pass
我們來說明一下,class關鍵詞來聲明這是一個類,緊接著就是類名。后接一個(),里面是該類所繼承的父類。
在2.7中,一個類如果沒有繼承其它類,則可以另其繼承object類。那么這樣定義的就是一個new style object,即新式類。
如果不聲明繼承自何類,那么定義的則是經典類。
例如:
# 定義新式類 class Student(object): pass # 定義經典類 class Student2: pass
新式類和經典類的區別出了寫法不一樣外,還存在其它區別:
新式類的類型是type,經典類的類型是classobj。新式類的出現就是為了將所有類的類型統一為type。
對于多繼承,繼承搜索的順序發生了改變。(這里不懂)
默認屬性發生了改變
可能還有其它
Python 3.x以上版本所有的類均是新式類,不需要顯式地繼承object。
__init__構造函數類中可以定義一個構造函數__init__。構造函數的意思就是類在創建的時候會執行的函數。__init__函數的第一參數是self,指實例本身。__init__函數還可以有多個參數,這些參數需要在實例創建的時候傳入。
例如:
class Student(object): def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender
__init__函數經常用于對實例屬性進行初始化。
類中的函數類中的函數也叫做方法。方法與其它函數有所區別,即方法的第一個參數永遠是self,即實例本身。
創建實例后,在調用方法是,并不需要傳入實例,因為編譯器為自動為我們加入實例。例如:
class Student(object): def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender # 方法的第一個參數是self def print_name(self): print self.name student = Student("charlie", 20, "male") #調用函數的時候,并不需要手動傳入實例student student.print_name()兩個特殊的函數
classmethod和staticmethod。
簡單粗淺地說,可以理解成:
classmethod的是定義一些僅僅跟類有關,但是跟實例無關的方法。
staticmethod是一些跟類有關系的功能,但是其具體的實現卻又不需要用到類或者實例的參與。staticmethod叫做靜態方法。
更多解釋和例子,可以閱讀知乎上的回答:https://www.zhihu.com/questio...
類的屬性屬性就更加好理解了。
例如我們設計一張制造冰箱的圖紙,我們除了定義冰箱的功能(類的方法)外,還需要定義冰箱的顏色、長、寬、高、等屬性。類也一樣。
class Fridge(object): color = "yellow" height = 120 width = 30 food = "fish" def storage(self): print "keep %s fresh" % self.food fridge = Fridge() fridge.storage()類的封裝性
上面我們講了這么多類的特性,其實類就是一個數據類型。我們把一種數據類型封裝成一個類。
例如一個學生具有姓名、年齡、性別等屬性,另外他也有書寫姓名、讀書識字等功能。我們可以把一個Student所有的屬性和功能看成一個整體,那么這就是一個類。這個類就是與python中內置的其它數據類型一樣的數據類型,只不過這是我們自定義的,叫Student。
創建實例的方法十分簡單。即:
student = Student(括號內傳入在__init__函數中定義的參數)
python是一門動態語言。創建好的實例可以自由地添加屬性。在類中聲明的read-only的屬性,在實例中不能del。在實例中通過構造函數添加的或者在類外動態添加的屬性可以del。
類中的read-only屬性只能通過類屬性的形式刪除。
class Fridge(object): color = "yellow" width = 20 def __init__(self, height): self.height = height def storage(self): print "keep %s fresh" fridge = Fridge(100) fridge.name = "Haier" del fridge.color # AttributeError 報錯 del fridge.height del fridge.name del Fridge.width
怎么給實例或類動態添加方法?先挖個坑,學習了再寫。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38273.html
摘要:前言最近跟著流暢的和學習,看到裝飾器部分,有些頭大倒不是因為概念難以理解,而是書和網上文章中有些地方有些矛盾之處在簡單學習和實踐之后,整理出我對裝飾器的理解如下裝飾器的定義在不同語境下,裝飾器有不一樣的含義,我大致認為有種定義一種把另一個對 前言 最近跟著《流暢的Python》和《Python Cookbook》學習,看到裝飾器部分,有些頭大倒不是因為概念難以理解,而是書和網上文章中有...
摘要:一的基本語法縮進統一個或者個空格。中的數據類型中有個標準類型數字字符串列表元組集合字典數字復數在中,只有一種整數類型,表示長整型。如則會顯示,并不是換行。空行與代碼縮進不同,空行并不是語法的一部分。我們將首行及后面的代碼組稱為一個子句。 一、python3的基本語法 1、縮進統一(1個tab或者4個空格)。 for i in range(10): print (i) ...
摘要:本人很少寫代碼一般都是用的去年時用寫過一些收集系統信息的工具當時是邊看手冊邊寫的如今又要用來寫一個生成的工具就又需要查看手冊了至于為什么不用寫那是因為的庫不兼容永中在這里不得不說雖然很火但是一些庫還是不如多不如兼容性好為了避免以后再出這種事 Python3 Study Notes 本人很少寫 python 代碼, 一般都是用 go 的, 去年時用 python 寫過一些收集系統信息的工...
一、類(PT第九章) 9.3.4 方法對象 class MyClass: A simple example class i = 12345 def f(self): return hello world xf = x.f while True: print xf() 方法的特別之處在于實例對象被作為函數的第一個參數傳給了函數。在我們的示例中,調用x...
閱讀 2986·2021-11-23 09:51
閱讀 2798·2021-11-11 16:55
閱讀 2907·2021-10-14 09:43
閱讀 1394·2021-09-23 11:22
閱讀 1035·2019-08-30 11:04
閱讀 1663·2019-08-29 11:10
閱讀 956·2019-08-27 10:56
閱讀 3102·2019-08-26 12:01