python基礎(物件導向程式設計)

X__發表於2019-03-28

物件導向程式設計

一種程式設計思想。把物件作為程式的基本單元,

物件包含資料和運算元據的函式。在Python中,所有資料型別都可以視為物件

宣告類

class Student(object):                   #類

    def __init__(self, name, score):      #方法
        self.name = name                  
        self.score = score           #屬性

bart=Student()           #例項
複製程式碼

物件導向特點:資料封裝、繼承、多型

資料封裝:直接用內部定義函式訪問資料(不用知道內部細節)

呼叫方法:bart.print_score()

訪問限制:使內部屬性不被外部訪問(以_開頭的變數),只是習慣,仍可被修改訪問

繼承:子類可繼承父類的功能

多型:子類繼承父類型別,同時具有多種資料型別

獲取物件資訊方法:

type() 返回一個類

isinstance(,) 返回布林值

dir() 返回所有屬性和方法

操作物件狀態:

getattr(obj,'a','b') 若a不存在則返回b

setattr(obj,a,b) 將b賦給a

hasattr(obj,a) 判斷有無a

例項變數:給例項繫結屬性;類屬性:直接在class中定義屬性(名字不能相同)

__slots__變數:限制該class例項能新增的屬性

@property:將一個方法變成屬性呼叫

多重繼承:讓一個子類繼承多個父類

MixIn:給單個類增加多個功能

定製類:

    def __str__(self):
        return 'Student object (name=%s)' % self.name   #自定返回值,美化且能提取關鍵資訊
    __repr__ = __str__    #順便把除錯內容定義
複製程式碼

__iter__方法:返回一個迭代物件

例:斐波那契數列:

class Fib(object):
    def __init__(self):
        self.a, self.b = 0, 1 # 初始化兩個計數器a,b

    def __iter__(self):
        return self # 例項本身就是迭代物件,故返回自己

    def __next__(self):
        self.a, self.b = self.b, self.a + self.b # 計算下一個值
        if self.a > 100000: # 退出迴圈的條件
            raise StopIteration()
        return self.a # 返回下一個值
>>> for n in Fib():
...     print(n)

複製程式碼

__getitem__方法:使其list一樣能用能用下標訪問元素、可切片

__getattr__方法:動態返回一個屬性(找不到時)

    def __getattr__(self, attr):
        if attr=='score':
            return 99
複製程式碼

__call__方法:可直接對例項進行呼叫

callable()函式:判斷一個物件是否是“可呼叫”物件

列舉型別:Enum類

from enum import Enum

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
複製程式碼

精確地控制列舉型別,可以從Enum派生出自定義類:

from enum import Enum, unique

@unique  #裝飾器,保證無重複值
class Weekday(Enum):
    Sun = 0 # Sun的value被設定為0
    Mon = 1
    Tue = 2
    Wed = 3
    Thu = 4
    Fri = 5
    Sat = 6
複製程式碼

type()函式既可以返回一個物件的型別,又可以動態建立類

依次傳入3個引數:class的名稱;繼承的父類集合;class的方法名稱與函式繫結。

元類:metaclass

相關文章