python學習之【第十七篇】:Python中的面向物件(一)
1.什麼是類和類的物件?
類是一種資料結構,我們可以用它來定義物件,後者把資料值和行為特性融合在一起,類是現實世界的抽象的實體以程式設計形式出現。例項是這些物件的具體化。類是用來描述一類事物,類的物件指的是這一類事物的一個個體。例如:“人”就是一個類,而男人,女人,小孩等就是“人”這個類的例項物件;再比如“動物”也是一個類,而貓,狗等就是“動物”這個類的例項物件。
1.1 類的構成
在Python中,類(class)由3個部分構成:
- 類的名稱:類名;
- 類的屬性:一組資料;
- 類的方法:進行操作的方法;
1.2 類的宣告和定義
在Python中,類宣告和函式宣告很相似,頭一行用class
class 類名(object):
'類的說明解釋文件'
類體
注:通常,類名命名規則採用大駝峰式命名。
1.3 類的物件
在Python中,可以根據已經定義好的類去創建出一個個物件,建立物件也叫做例項化物件,物件是由類例項化而來的,類例項化的結果稱為一個例項或者稱為一個物件。
例項化物件的語法是:
物件名 = 類名()
例如:現有一個“車”類,而BMW是“車”類的一個物件,例項化這個物件即就是:
BMW = Car()
2.__init__()建構函式
3.類屬性
定義在類裡面的屬性叫做類屬性,類屬性可以在各個例項之間共享,包括父類的類屬性也可以在子類的例項中共享,類可以訪問類屬性,但不能訪問例項屬性。類屬性分為:資料屬性和函式屬性。
class Car(object):
# 資料屬性
wheel_num = 4
# 函式屬性
def move(self):
print('車正在移動。。。')
3.1 類屬性的增
向類裡面增加新的類屬性。
語法:
類名.新類屬性名 = 新類屬性值
示例:
class Car(object): # 資料屬性 wheel_num = 4 # 函式屬性 def move(self): print('車正在移動。。。') print('增加之前', Car.__dict__) Car.color = 'black' print(Car.color) # 輸出 black print('增加之後', Car.__dict__) """ 輸出: 增加之前 {'__module__': '__main__', 'wheel_num': 4, 'move': <function Car.move at 0x00000000027C9950>, '__dict__': <attribute '__dict__' of 'Car' objects>, '__weakref__': <attribute '__weakref__' of 'Car' objects>, '__doc__': None} black 增加之後 {'__module__': '__main__', 'wheel_num': 4, 'move': <function Car.move at 0x00000000027C9950>, '__dict__': <attribute '__dict__' of 'Car' objects>, '__weakref__': <attribute '__weakref__' of 'Car' objects>, '__doc__': None, 'color': 'black'} """
3.2 類屬性的刪
刪除類裡面的某一個類屬性。
語法:
del 類名.類屬性
示例:
class Car(object):
# 資料屬性
wheel_num = 4
# 函式屬性
def move(self):
print('車正在移動。。。')
print('刪除之前', Car.__dict__)
del Car.wheel_num
print('刪除之後', Car.__dict__)
"""
輸出:
刪除之前 {'__module__': '__main__', 'wheel_num': 4, 'move': <function Car.move at 0x0000000002799950>, '__dict__': <attribute '__dict__' of 'Car' objects>, '__weakref__': <attribute '__weakref__' of 'Car' objects>, '__doc__': None}
刪除之後 {'__module__': '__main__', 'move': <function Car.move at 0x0000000002799950>, '__dict__': <attribute '__dict__' of 'Car' objects>, '__weakref__': <attribute '__weakref__' of 'Car' objects>, '__doc__': None}
"""
3.3 類屬性的改
修改類裡面的某個類屬性。
語法:
類物件.類屬性 = 新值
示例:
class Car(object):
# 資料屬性
wheel_num = 4
# 函式屬性
def move(self):
print('車正在移動。。。')
print('修改之前', Car.wheel_num) # 輸出 修改之前 4
Car.wheel_num = 5
print('修改之後', Car.wheel_num) # 輸出 修改之後 5
注意:
如果修改類屬性,必須通過 類物件.類屬性 = 新值 去修改,不能通過例項訪問類屬性修改,如果使用例項訪問類屬性修改類屬性,只會在例項中新建一個與類屬性同名的例項屬性,並且當例項屬性與類屬性同名時,例項只會訪問到例項屬性,而不會去訪問類屬性。
3.4 類屬性的查
訪問類屬性直接使用類名.類屬性即可訪問。
如果需要檢視某個類中都有哪些類屬性時,可以使用內建屬性**__dict__**進行檢視,該內建屬性返回一個字典,包含了類中所有的屬性。
示例:
class Car(object):
# 資料屬性
wheel_num = 4
# 函式屬性
def move(self):
print('車正在移動。。。')
print(Car.__dict__)
"""
輸出:
{'__module__': '__main__',
'wheel_num': 4,
'move': <function Car.move at 0x00000000027F9950>,
'__dict__': <attribute '__dict__' of 'Car' objects>,
'__weakref__': <attribute '__weakref__' of 'Car' objects>,
'__doc__': None}
"""
3.5 類的幾個特殊屬性
類裡面除了有自定義的屬性外,還有幾個特殊的內建屬性。
- ** __name__: **返回類的名字
- **__doc__:**返回類的文件字串
- **__base__:**返回類的第一個父類
- **__bases__:**返回類的所有父類構成的元組
- **__module__:**返回類定義所在的模組
- **__class__:**返回例項對應的類
示例:
class Car(object):
"""這是一個Car類"""
# 資料屬性
wheel_num = 4
# 函式屬性
def move(self):
print('車正在移動。。。')
print(Car.__name__) # 輸出 Car
print(Car.__doc__) # 輸出 這是一個Car類
print(Car.__base__) # 輸出 <class 'object'>
print(Car.__bases__) # 輸出 (<class 'object'>,)
print(Car.__module__) # 輸出 __main__
print(Car.__class__) # 輸出 <class 'type'>