python物件導向(一)

吾有一劍發表於2018-12-17

物件導向

1.初始物件導向

    程式導向:

        一切以事務的發展流程為中心.

    物件導向:

        一切以物件為中心. 一切皆為物件. 具體的某一個事務就是物件

    打比方:

  程式導向

        大象進冰箱

    步驟: 第一步, 開門, 第二步, 裝大象, 第三步, 關門

  物件導向:

  大象, 你進冰箱.

    此時主語是大象. 我操縱的是大象. 此時的大象就是物件

2. 類和物件

    類: 就是圖紙. 建立物件的第一步. 先畫圖紙. 先寫類.

    物件: 物件就是車. 通過圖紙造出來的具體的東西. 通過類來建立物件

    類與物件的關係:

        類是對xxx事物的歸類.

                def __init__(self, 引數)  引數一般作為屬性設定給物件. 物件就是self, 對屬性的封裝.

       pass

                def 方法(self, 引數): 方法. 第一個引數一般是固定的self. 當前類的物件.

                    pass

        物件是xx型別的一個具體

            建立物件: 類名()

    建立類:

    class 類名:

        def __init__(self): # 初始化方法. 又被成為構造方法

            self.屬性 = 值

        def fangfa(self):

            方法體(函式體,  return)

    建立物件:

        變數 = 類名() # 例項化 <-> 建立物件

        變數.屬性 # 訪問物件的屬性資訊

        變數.方法() # 訪問類中的方法

class HeShang:
    def __init__(self, fh, name, miao):
        self.fahao = fh
        self.name = name
        self.miao = miao

    def nianjing(self):
        print("和尚會念經")

    def huayuan(self):
        print("和尚會化緣")

lzs = HeShang("花和尚", "魯智深", "梁山水廟")
lzs.nianjing()
lzs.huayuan()

 


3. 物件導向和麵向過程的對比


    如果寫一些比較小的程式用程式導向.


    程式很複雜. 很龐大建議用物件導向.


4. 物件導向的三大特徵


    封裝:


        1. 對屬性的封裝(__init__())


            self.xxx = xxx


        2. 對方法和功能的封裝

class Student:
    def __init__(self, num, name, clazz):
        self.num = num
        self.name = name
        self.clazz = clazz


stu = Student("10010", "曹寶寶", "三年二班")
stu2 = Student("10086", "王迪", "三年一班")
def teach(s):
    print("教他%s語文課" % (s.name))
teach(stu)
teach(stu2)

    繼承

        子類自動擁有父類中除了私有內容外的其他所有內容

        class Bar(Foo):  Bar對Foo進行了擴充套件

            pass

        當出現x是一種y的時候. 推薦使用繼承關係

        python支援多繼承. 查詢順序: 先找離他近的.

class Base1:
    def f1(self):
        print("base1.1")
    def f2(self):
        print("base1.f2")
    def f3(self):
        print("base2.f3")
        self.f1()
class Base2:
    def f1(self):
        print("base2.f1")
class Foo(Base1,Base2):
    def f0(self):
        print("foo.f0")
        self.f3()
obj = Foo()
obj.f0()

    多型  (python原生直接就是多型)

        python更多的支援的是鴨子模型,只要會叫就可以

class Animal:
    def chi(self):
        print("會吃")

class GoldenMonkey(Animal):
    def chi(self):
        print("用手拿著吃, 五花八門")

class Tiger(Animal):
    def chi(self):
        print("老虎吃肉")

class Elephant(Animal):
    def chi(self):
        print("大象吃香蕉")

def wei_animal(ani):
    ani.chi()


t = Tiger()
m = GoldenMonkey()
e = Elephant()

wei_animal(t)
wei_animal(m)
wei_animal(e)

相關文章