二、定義和使用類
早期的程式語言是面向過程的,資料和函式之間是沒有任何直接聯絡的,它們之間聯絡的方式就是通過函式呼叫提供引數的形式將資料傳入函式進行處理,但這可能因為錯誤的傳遞引數、錯誤地修改了資料而導致程式出錯,當需要修改或維護程式時要從程式提供的一堆資料中去尋找和修改它們。要擴充套件函式的功能,只能重新建立乙個函式或修改它,所以其開發效率有點低。
而從現實世界得到的啟發就是任何事物都具有自己的屬性或能力,比如一張桌子有高度材質、顏色、重量等屬性;但它無生命,自己不能移動,也不具有完成其他動作的能力。再如乙隻小狗,也有毛色、重量、年齡、體重等屬性;它有生命,可以自己走路、奔跑、叫喚等,具有自己的能力.
那麼,在程式中模仿現實世界,對現實世界中的事物進行有目的抽象,即抽象出現實世界事物中對使用者有用的屬性和能力來建立乙個關聯在一起的模型,對於現實世界中事物沒有的屬性或能力,而程式中需要的,則可以在程式中進行新增;對於現實世界中事物具有的屬性或能力,而程式中不需要關心的,則可以在程式中不進行表達。這種抽象出來的模型被稱之為物件或類。
物件導向程式設計就是通過物件導向分析和設計,建立模型(類或物件)並完成最終程式的過程。因此,在物件導向程式設計中,程式設計的主體就是用類或物件構建模型,並使它們之間可以互相聯絡以解決實際問題。
主要體現在以下幾個方面:
具有相同屬性或能力的模型在物件導向程式設計中以類進行定義和表示的。
由類可以派生出(例項化)出同類的各個例項。
就像一枚印章一樣,沾上不同顏色的墨水就可以印出不同顏色的文字或圖形,刻製一枚印章可以理解為定義乙個類,印章的每一次使用都可以理解為類的一次例項化。
在python語言中,前面所講的資料型別其實也都是物件導向的。
例如對於整數型別(int),每乙個整數都是整數類的例項;對於浮點數型別,每乙個實際的浮點數都是浮點數類的乙個例項。
注意:「物件」一詞在物件導向程式設計中,根據上下文不同可以指「類」,也可以指「例項」,這並不是乙個很準確的稱呼。
上面說了這麼多,主要是想讓一些對類和物件沒有任何概念的同學產生一點模糊的認識,接下來就說說如何定義和使用類。
在python語言中定義類的基本形式為:
class
類(父類名)
:pass
其中:
注意,冒號:
不能省略
如下定義乙個最簡單的類:
class
test
:pass
看似這個類什麼也沒做,也沒有繼承其他的類,但在python中,沒有繼承其他類的類,會自動繼承系統內建的類object
,使用dir(test)
可以檢視test
類從object類所繼承到的屬性和方法。
>>
>
dir(test)
['__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__'
]
類在定義後必須先例項化才能使用,類的例項化與函式呼叫類似,使用類名加圓括號的形式類名()
就可以了。
如下:
class
myclass
:#定義乙個類
"this is my first class"
#該類只有一些說明資訊,沒有具體語句
a = myclass(
)#例項化乙個類,例項名為a
print
(a.__doc__)
#輸出例項a的屬性__doc__的值,即類的說明資訊
help
(a)#輸出類的幫助資訊
print(a.__doc__)
的輸出如下:
this is my first class
help(a)
的輸出如下:
help on myclass in module __main__ object:
class myclass(builtins.object)
| this is my first class
| | data descriptors defined here:
| | __dict__
| dictionary for instance variables (if defined)
| | __weakref__
| list of weak references to the object (if defined)
從class myclass(builtins.object)
可以看出,myclass類自動繼承了builtins.object 這個類,後面顯示的屬性就是從它繼承而來。
如果在類中定義了函式,也可以用例項來呼叫它,接下來會說到。
注意:一般來說,為了區分定義在類內部的函式和外部的全域性函式,會把類中定義的函式稱為方法。
第8 1節 Python類的構造方法 init
一 引言 凡是物件導向設計的語言,在類例項化時都有構造方法,很多語言的構造方法名與類名一致,python中類的構造方法比較特殊,必須是 init 特殊方法。二 語法釋義 1.語法 init self,args,kwargs 其中 1 self為建立的例項,由python自動傳入。各位看官注意 1 關...
python 類的學習
關於類的概念等,自己已經略微了解了一些,類的介紹,就不贅述了。結合python的化 最基礎的使用 有幾個點 1 建立類的方法 類命名規則 駝峰 class mybook 如有繼承 類名後加括號,括號裡寫父類 class mybook book 以冒號結束 2 類中的變數 屬性 類中的函式 方法 2....
C 入門經典 例8 1 類的繼承
1 繼承是物件導向的主要特徵 此外還有封裝和多型 之一,它使得乙個類可以從現有類中派生,而不必重新定義乙個新類。繼承的實質就是用已有的資料型別建立新的資料型別,並保留已有資料型別的特點,以舊類為基礎建立新類,新類包含了舊類的資料成員和成員函式,並且可以在新類中新增新的資料成員和成員函式。舊類被稱為基...