Python面向物件和類(一)
面向物件程式設計 Ojbect-Oriented Programing
什麼是物件:
物件是指現實中的物體過實體物件有什麼特徵:
物件有很多屬性(名詞,形容詞)
姓名,年齡,性別
物件有很多行為(動作,動詞)
學習,吃飯,睡覺,踢球,工作,借錢
面向物件
把一切都看成物件(例項) 用各種物件之間的關係來描述事務
類(class)
擁有相同屬性和行為的物件分為一組,即為一個類
類是用來描述物件的工具,用類可以建立此類的物件(例項)
面向物件示意:
車(類) ------> BYD E5(京A.88888) 例項(物件)
\
\---> BMW X5 (京B.00000) 例項(物件)狗(類) ------> 小京巴(戶籍號: 000001)
\
\----> 導盲犬(戶籍號: 000002)int(類) ----> 100 (物件)
\
\---> 200 (物件,例項)
類的建立語句:
class 類名(繼承列表):
'類的文件字串'
例項方法的定義
類變數的定義
類方法的定義(@classmethod)
靜態方法的定義(@staticmethod)
作用:
建立一個類
類用於描述物件的行為和屬性
類用於建立此類的一個或多個物件(例項)
說明:
類名必須為識別符號
類名實質上就是變數, 它繫結一個類
建構函式
建構函式的呼叫表示式
語法:
類名([建立傳參列表])作用:
建立這個類的例項物件,並返回此例項的引用關係
例項物件說明:
- 例項有自己的作用域和名字空間,可以為該類的物件新增例項變數(也叫屬性)
- 例項可以呼叫類方法和例項方法
- 例項可以訪問類變數和例項變數
例項方法 method
語法:
class 類名(繼承列表):
def 例項方法名(self, 引數1, 引數2, ...):
'文件字串'
語句
作用:
用於描述一個物件的行為,讓此型別的全部物件都擁有相同的行為
說明:
1. 例項方法實質是函式,是定義在類內的函式
2. 例項方法至少有一個形參有,第一個形參代表呼叫這個方法的例項,一般命名為 'self'
例項方法的呼叫語法:
例項.例項方法名(呼叫傳參)
或
類名.例項方法名(例項,呼叫傳參)
例項屬性 attribute(也叫例項變數)
每個例項物件可以有自己的變數,稱為例項變數(也叫屬性)
語法:
例項.屬性名賦值規則:
首次為屬性賦值則建立此屬性
再次為屬性賦值則修改屬性的繫結關係
作用:
記錄每個物件自身的資料
刪除屬性 del 語句
del 物件.例項變數名
例如:
class Dog:
pass
dog1 = Dog()
dog1.color = "白色"
del dog1.color # 刪除
del 語句
del 變數名 刪除變數
del 列表[整數表示式] 刪除列表中的元素
del 字典[鍵] 刪除字典中的鍵
del 物件.屬性 刪除物件的屬性
初始化方法:
作用:
對新建立的物件新增屬性語法:
class 類名(繼承列表):
def __init__(self [, 形參列表]):
語句塊[ ] 代表中的內容可省略
說明:
1. 實始化方法名必須為 '__init__' 不可改變
2. 初始化方法會在建構函式建立例項後自動呼叫.且將例項自身通過第一個引數self 傳入 __init__ 方法
3. 建構函式的實參將通過__init__方法的引數列表傳入到 '__init__' 方法中
4. 初始化方法內如果需要return 語句返回,則只能返回None
示例:
# 寫一個Student類 # 1) 為該類新增初始化方法, 實現在建立物件時自動設定 # '姓名','年齡', '成績' 屬性 # 2) 新增set_score方法能修改成績資訊 # 3) 新增show_info方法列印學生物件的資訊 class Student: def __init__(self, name, age, score): self.name = name self.age = age self.score = score def set_score(self, s): self.score = s def show_info(self): print("{}今年{}歲,成績是:{}分".format(self.name, self.age, self.score)) c1 = Student("小張", "25", "78") c1.show_info() # 小張今年25歲,成績是:78分 c1.set_score(50) c1.show_info() # 小張今年25歲,成績是:50分
析構方法:
語法:
class 類名:
def __del__(self):
...
說明:
析構方法在物件被銷燬時被自動呼叫
python建議不要在物件銷燬時做任何事情,因為銷燬的時間難以確定
示例:
# 此示例示意析構方法的用法 class Car: def __init__(self, name): self.name = name print("汽車", name, '被建立') def __del__(self): '''析構方法,此方法會在物件銷燬時自動被呼叫''' print('汽車', self.name, '被銷燬') c1 = Car('BYD E6') c2 = c1 del c1 # 此時是刪除c1變數,同時解除c1繫結的物件的引用
預置例項屬性
__dict__ 屬性
__dict__ 屬性繫結一個儲存此例項自身變數的字典示例:
class Dog: pass dog1 = Dog() print(dog1.__dict__) # {} dog1.kinds = '京巴' print(dog1.__dict__) # {'kinds': '京巴'}
__class__ 屬性
此屬性用於繫結建立些例項的類作用:
可以藉助於此屬性來訪問建立此例項的類
示例:
class Dog:
pass
dog1 = Dog()
print(dog1.__class__)
dog2 = dog1.__class__()
print(dog2.__class__)
用於類的函式:
- isinstance(obj, 類或元組) 返回這個物件obj是否是某個類的物件或某些類中的一個類的物件,如果是則返回True,否則返回False
- type(obj) 返回物件的型別