在剛接觸編程時,我們就了解到編程界有兩大思想:面向過程與面向對象,Python 就是一門面向對象的語言,如果你了解過面向對象的思想,自然就知道面向對象思想包含兩個基本概念:類與對象 ,下面我們就一起詳細學習下 Python 的類與對象吧!
1 基本概念
1.1 面向對象
面向對象是一種抽象,是一種用分類的方式看待問題的方法,用 Java 的編程思想來說就是:萬物皆對象;面向對象有三大特性:封裝、繼承、多態。
1.2 類
上面說了面向對象是一種用分類的方式看待問題的方法,一個分類就是一個類,可以把類看作是一個抽象的模板,如:Car 類。
1.3 對象
對象是根據類創建出來的一個個實例。
2 基本使用
2.1 類的定義
# 類的定義
class Car:pass
2.2 對象的創建
# 創建 Car 的實例對象 c
class Car:passc = Car()
2.3 類中定義屬性???????
# 定義 Car 類的屬性 name
class Car:name = 'BMW'
3 類中的方法
3.1 內置方法
Python 創建任何一個類的時候,都會包含一些內置的方法,主要包括如下:
方法 | 說明 |
---|---|
__init__ | 構造函數,在生成對象時調用 |
__del__ | 析構函數,釋放對象時使用 |
__repr__ | 打印,轉換 |
__setitem__ | 按照索引賦值 |
__getitem__ | 按照索引獲取值 |
__len__ | 獲得長度 |
__cmp__ | 比較運算 |
__call__ | 函數調用 |
__add__ | 加運算 |
__sub__ | 減運算 |
__mul__ | 乘運算 |
__div__ | 除運算 |
__mod__ | 求余運算 |
__pow__ | 乘方 |
3.2 自定義方法
Python 有三種常見的方法,分別為:實例方法、類方法、靜態方法,這三種方法都定義在類中。
3.2.1 類方法
類方法是將類本身作為對象進行操作的方法。
定義與使用???????
'''
類方法(可調類變量、可被實例調用、可被類調用)
1、類方法通過@classmethod裝飾器實現,只能訪問類變量,不能訪問實例變量;
2、通過cls參數傳遞當前類對象,不需要實例化。
'''
class Car(object):name = 'BMW'def __init__(self, name):self.name = name@classmethoddef run(cls,speed):print(cls.name,speed,'行駛')
# 訪問方式1
c = Car("寶馬")
c.run("100邁")
# 訪問方式2
Car.run("100邁")
3.2.2 靜態方法
靜態方法是類中的函數,不需要實例。
定義與使用???????
'''
靜態方法(可調類變量、可被實例調用、可被類調用)
1、用 @staticmethod 裝飾的不帶 self 參數的方法;
2、靜態方法名義上歸類管理,實際中在靜態方法中無法訪問類和實例中的任何屬性;
3、調用時并不需要傳遞類或實例。
'''
class Car(object):name = 'BMW'def __init__(self, name):self.name = name@staticmethoddef run(speed):print(Car.name,speed,'行駛')# 訪問方式1
c = Car("寶馬")
c.run("100邁")
# 訪問方式2
Car.run("100邁")
3.2.3 實例方法
實例方法就是類的實例能夠使用的方法。
定義與使用???????
# 實例方法(可調類變量、可調實例變量、可被實例調用)
# 第一個參數強制為實例對象 self。
class Car(object):name = 'BMW'def __init__(self, name):self.name = namedef run(self,speed):print(self.name,speed,'行駛')# 訪問
c = Car("寶馬")
c.run("100邁")
4 類的繼承
定義與使用???????
# 基本語法:class ClassName(BaseClassName)
# 父類
class Car(object):name = 'BMW'def __init__(self, name):self.name = namedef run(self,speed):print(self.name,speed,'行駛')# 子類
class BMWCar(Car):conf = "經濟適用型"pass# 調用父類 Car 中 run 方法
bc = BMWCar("BMW經濟適用型轎車")
bc.run("100邁")
5 類的多態
定義與使用???????
# 父類
class Car(object):name = 'BMW'def __init__(self, name):self.name = namedef run(self,speed):print('Car-->',self.name,speed,'行駛')# 子類1
class BMWCar(Car):def run(self,speed):print('BMWCar-->',self.name,speed,'行駛')# 子類2
class SVWCar(Car):def run(self,speed):print('SVWCar-->',self.name,speed,'行駛')# 調用 run 方法
c = Car("Car")
c.run("120邁")bc = BMWCar("寶馬")
bc.run("100邁")sc = SVWCar("大眾")
sc.run("80邁")# 輸出結果
'''
Car--> Car 120邁 行駛
BMWCar--> 寶馬 100邁 行駛
SVWCar--> 大眾 80邁 行駛
'''
在上面的例子中,我們可以看出:c、bc 、sc 是不同類型的對象,在它們調用 run 方法時,調用的均是各自類中的方法,這就是多態。
總結
本節給大家介紹了 Python 類與對象的定義和使用,對 Python 工程師提供了支撐,能夠根據實際情況在項目中靈活使用不同類型的方法。