python入門(五)

  經過前面的學習咱們知道,事與物都是對象,咱們都能將其定義爲一個類,python中將該類定義爲object,咱們所建立的類都是直接或間接繼承與object,他們都有object類的屬性和方法,面向對象有抽象、繼承、封裝、多態四個特性。python

抽象編程

  建立類要經過class關鍵字來建立,好比有一我的,咱們要實現他的類,咱們把它抽象爲Person編程語言

  class Person:學習

    pass  #若是沒有想要封裝的屬性咱們能夠經過pass關鍵字來結束spa

封裝對象

  對象有本身的屬性和方法,好比一我的,他有本身的姓名和年齡的屬性,他能幹什麼這是他的方法,咱們能夠定義他的名字屬性爲name,年齡爲age,他能跑步、說話的方法,咱們能夠定義跑步run(),speak()繼承

  class Person:it

    name = 'Tom'class

    age = 18object

    def run(self):

      print('我正在跑步')

    def speak(self):

      print('我正在說話')

  p = Person()   #   p就是類的一個實例體現

  print(p.name,p.age)   #打印結果: Tom 18

  p.run()  #打印結果:  我正在跑步       調用run()方法咱們不用傳入參數,self是對象的實例,直接用p.run()就能實現實例方法

  p.spaek()   #打印結果: 我正在說話

  這樣咱們就建立了一個叫Tom的人,可是咱們經過p2 = Person()再建立一我的,咱們打印他的名字和年齡會發現,他也叫Tom,可是這兩我的顯然不是同一我的,咱們須要的是經過這個類來建立另一個叫jack的人,而且運行方法run()他們會打印不一樣的跑路方式

  class Person:

    name = 'Tom'

    age = 18

    def __init__(self,name=None):  #name=None表示參數能夠不傳入,當不傳入參數建立實例時咱們的name在實例中找不到就回去類中去找,實例的name仍是Tom

      if name is not None:

        self.name = name

    def run(self,where):

      print('%s在%s跑步'%(self.name,where))

  p = Person('jack')

  p2 = Person('jerry')

  print(p.name,p2.name)   #   打印結果: jack   jerry

  p.run('公園')  #打印結果:jack在公園跑步

  p2.run('馬路')  #打印結果:jerry在馬路跑步

  咱們是怎麼實現Person('jack')就建立了一個叫jack的人呢,這裏咱們用到了__init__()方法,咱們在建立類的時候,會自動調用__init__()方法,咱們從新定義__init__(),在裏面加入name參數,咱們把jack傳入到Person類中進行調用建立實例,並改變實例的name.

繼承

  什麼是繼承,好比貓和狗,他們都有相同的特性,他們都是動物,那麼咱們能夠把動物當成一個類Animal,貓抽象Cat類,狗抽象爲Dog類,貓會叫,狗也會叫,動物會叫,因此咱們定義一個方法cry()

  class Animal:

    def cry(self):

      print('嗚嗚嗚')

  class Cat(Animal):

    pass

  class Dog(Animal):

    pass

  cat = Cat()

  cat.cry()   #打印結果: 嗚嗚嗚

  dog = Dog()

  dog.cry()  #打印結果:嗚嗚嗚

  咱們發現打印的是嗚嗚嗚,那麼咱們就調用了Animal的cry()方法,咱們的cat在調用cry()時在Cat類中找不到,就回去父類去找,找不到就會去祖父類去找,知道object類,若是還找不到就會報錯

  咱們要實現貓叫喵喵喵,就從寫cry()方法

  class Cat(Animal):

    def cry(self):

      print('喵喵喵')

  cat = Cat()

  cat.cry()  #打印結果: 喵喵喵

  咱們這樣實現會發現不是很對勁,爲何不直接實現Cat類不去繼承Animal,這樣咱們就要考慮到什麼狀況使用繼承比較好,那就是有些屬性和方法是固定不變的那麼實現繼承就是正確的。

多態

  什麼是多態?好比a=1,那麼就會建立一個int類型值爲1的對象,爲何會把1認定爲就是int型呢?python是一門動態編程語言,在內部後自動對1進行判斷,而後賦給他int類型,這是多態的體現,也就是人們提出的鴨子模型,若是一個物體跑起來像鴨子,那麼他就是鴨子,多態更注重於方法的實現,不在關注類自己。

  class Duck:

    def run(self):

      print('我像一隻鴨子')

  class A:

    def run(self):

      print('我看起來像一隻鴨子')

  def func(obj):

    obj.run()

  duck = Duck()

  a = A()

  func(duck)  #我像一隻鴨子

  func(a)  #我看起來像一隻鴨子

  那麼咱們說duck和a都是一隻鴨子

相關文章
相關標籤/搜索