1. 程式人生 > >python學習之【第十七篇】:Python中的面向物件(一)

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'>

4. 例項屬性

4.1 例項屬性的增

4.2 例項屬性的刪

4.3 例項屬性的改

4.4 例項屬性的查

5.例項方法、類方法、靜態方法

5.1 例項方法

5.2 類方法

5.3 靜態方法