1. 程式人生 > >Python面向物件和類(一)

Python面向物件和類(一)

面向物件程式設計 Ojbect-Oriented Programing

 什麼是物件:
    物件是指現實中的物體過實體

 物件有什麼特徵:
    物件有很多屬性(名詞,形容詞)
      姓名,年齡,性別
    物件有很多行為(動作,動詞)
      學習,吃飯,睡覺,踢球,工作,借錢

  面向物件

把一切都看成物件(例項) 用各種物件之間的關係來描述事務

類(class)

   擁有相同屬性和行為的物件分為一組,即為一個類
   類是用來描述物件的工具,用類可以建立此類的物件(例項)

面向物件示意:
    車(類)  ------> BYD E5(京A.88888)  例項(物件)
            \
             \---> BMW X5 (京B.00000) 例項(物件)

    狗(類)  ------> 小京巴(戶籍號: 000001)
            \
             \----> 導盲犬(戶籍號: 000002)

    int(類)  ----> 100 (物件)
            \
             \---> 200 (物件,例項)

類的建立語句: 

class 類名(繼承列表):
      '類的文件字串' 
      例項方法的定義
      類變數的定義
      類方法的定義(@classmethod)
      靜態方法的定義(@staticmethod)

作用:
    建立一個類
    類用於描述物件的行為和屬性
    類用於建立此類的一個或多個物件(例項)
說明:
    類名必須為識別符號
    類名實質上就是變數, 它繫結一個類

建構函式

建構函式的呼叫表示式
  語法:
          類名([建立傳參列表])

  作用:
       建立這個類的例項物件,並返回此例項的引用關係

例項物件說明:

  1. 例項有自己的作用域和名字空間,可以為該類的物件新增例項變數(也叫屬性)
  2. 例項可以呼叫類方法和例項方法
  3. 例項可以訪問類變數和例項變數

例項方法 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)                                              返回物件的型別