面向對象編程(以Python爲例)

        面向對象編程要解決的根本問題之一是實現代碼複用,經過抽象出一類邏輯的行爲以及屬性來實現複用的目的,具體邏輯經過繼承基類重寫方法配置屬性實現實例個性化python

Python 類的繼承算法

代碼:編程

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# time @2016/3/7 11:28 create by JasonYang


class Animal(object):
    def __init__(self, name):
        self.name = name
        print "小動物 %s 出生了" % name

    def eat(self):
        pass

    def sleep(self):
        pass

    def live(self):
        self.eat()
        self.sleep()


class Pig(Animal):
    def __init__(self, name):
        self.name = name
        super(self.__class__, self).__init__(name)

    def eat(self):
        print '%s 吃糧食' % self.name

    def sleep(self):
        print '%s 趴着睡' % self.name


class Horse(Animal):
    def __init__(self, name):
        self.name = name
        print self.__class__
        super(self.__class__, self).__init__(name)

    def eat(self):
        print '%s 吃青草' % self.name

    def sleep(self):
        print '%s 站着睡' % self.name


if __name__ == '__main__':
    pig = Pig('pig')
    horse = Horse('horse')
    pig.live()
    horse.live()

結果:函數

D:\Python27\python.exe E:/workspace/jjww/src/main.py
小動物 pig 出生了
<class '__main__.Horse'>
小動物 horse 出生了
pig 吃糧食
pig 趴着睡
horse 吃青草
horse 站着睡

Process finished with exit code 0

       在編碼過程當中常常會用到class,可是去看寫過的代碼,其中用class的地方不少的都是將class單純地用做一種屬性和方法的集合,而忽視了class中「行爲」與「繼承」的使用方法。編碼

       在一個可以抽象出行爲邏輯的功能中,若是得當的使用class,在基類中抽象出」行爲「在繼承基類的子類中定義或實現特殊(或意爲特例)的屬性或方法,這可以很好的爲代碼解耦,同時一個基類可以描述一類行爲,而對於行爲的特殊實例只須要定製子類就可以實現需求。因此合理有效的使用面向對象的方式方法可以有效的組織代碼、減小編碼量,使代碼便於維護便於改動spa

注: class A(object): 這種類型的定義是新類的定義方法,支持super(type,self).__init__(params)這種形式的調用,若是定義類型 爲 class A:  這種形式則會在調用super函數的地方報錯,第二種類的定義方法是舊類code

與類相關的一些模式:對象

  • 模板方法模式:在一個方法中定義一個算法骨架,並將一些實現逐步延遲到子類中[1],一種思路就是在父類中定義各個方法執行順序(算法)。在子類中重載方法,實現定製..繼承

  •  

 

參考文獻:utf-8

[1].《編寫高質量python代碼》 張穎,賴勇浩著,機械工業出版社 P132

相關文章
相關標籤/搜索