面向对象编程(以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,在基类中抽象出”行为“在继承基类的子类中定义或实现特殊(或意为特例)的属性或方法,这能够很好的为代码解耦,同时一个基类能够描述一类行为,而对于行为的特殊实例只需要定制子类就能够实现需求。所以合理有效的使用面向对象的方式方法能够有效的组织代码、减少编码量,使代码便于维护便于改动

注: class A(object): 这种类型的定义是新类的定义方法,支持super(type,self).__init__(params)这种形式的调用,如果定义类型 为 class A:  这种形式则会在调用super函数的地方报错,第二种类的定义方法是旧类

与类相关的一些模式:

  • 模板方法模式:在一个方法中定义一个算法骨架,并将一些实现逐步延迟到子类中[1],一种思路就是在父类中定义各个方法执行顺序(算法)。在子类中重载方法,实现定制..

  •  

 

参考文献:

[1].《编写高质量python代码》 张颖,赖勇浩著,机械工业出版社 P132

转载于:https://my.oschina.net/u/2504425/blog/619390

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值