标签:
写在前面的话
终于,又到了周五。当小伙伴们都不再加班欢欢喜喜过周末的时候,我刚刚写完这一周的游戏作业,从面对晚归的紧皱眉头到现在的从容淡定,好像只有那么几周的时间。突然发现:改变——原来这么简单。很多时候我们在想要为自己的青春拼搏一次的时候都输给了偶尔的抵触和轻松愉悦的生活。我们不过和走到最后的人差了两个字——坚持!所以尽管进入类和对象这一部分,大家都会有畏难心理,但是坚持一下下,你就会是那个走到最后的人!
回顾
上一篇中我们初步的认识了类和对象,了结了它们的一些语法,就相当于得到了一个对象的骨骼。今天再来补充一些和他们相关的内容,给我们的小骷髅添上肌肉和皮肤,它就是一个活生生的对象了,从此你就是一个有对象的人了!哈~
首先我们从面向对象的特性这个角度先回顾一下上一篇的内容,之前我们已经知道了“车”是一个类,车的“品牌”和“价格”是它的属性,可以在路上跑是他的行为;因此我们定义了一个类car,并在这个car类中定义了price和type两个属性,还有一个DriveDistance方法。我们说,这个car类就像是一个收纳包,把和“车”有关的零散属性、方法都装进了包里,这就是面向对象的封装性。
面向对象的三大特性
上一篇我们讲的主要所有内容都符合它的封装特性。那么问题来了?类难道只有封装性么?当然不是,作为一个这么难理解的东西,要是只有封装性都对不起我们死了这么多脑细胞!所以,晴天霹雳来了,面向对象有三大特性,他们分别是:封装、继承和多态。
好消息和好消息,好消息一:封装我们已讲完,所以三座大山我们已经移走了一座,好消息二:由于python的特殊性,多态的应用并不广泛,所以我们其实还有一座半就胜利了。闲话少叙,今天咱们就聊聊继承,先移走一座再说!
正题——继承
大学同学聚会,同桌吃饭,我们都是人,都有吃饭、喝饮料这些行为,但是毕业之后大家都做了不同的工作,有的当了会计、有的做了程序员,现在我们得到了描述这些同学这个需求,我们一看非常开心,我们可以实现呀,然后写下了下面这段代码:
我们看上面左侧的代码,这么写确实实现了我们的需求,但是,写了那么多行,但是真正不一样的只有黄色框框里面的内容,好在大学同学的职业都差不多,这要是高中聚会可就热闹了。这个时候,我们就想,有没有可能我们不重复写之前的代码,也实现同样的功能呢?当然啦!→_→右侧这段代码。看着就简洁了不少,这就是类的继承。现在你看着好像有点儿米糊,没关系,这里只需要知道有一种简单的方法可以实现,这种写法就叫做继承。具体我们后面还要详细讲。
我们来详细看看上面这张图,解释一下什么叫做继承,首先在最上面的黄框框里,我们定义了一个类叫做classmate,这个里面放了吃、喝两个方法,下面我们又定义了两个类,pythoner和accounting类,里面各写了一个occupation方法,打印出了人物的职业。我们看到,classmate类和我们之前见到的类并没什么不同,可是pythoner和accounting类定义的时候,我们看红框框里写了classmate类的类名,我们说,这样就实现了继承。pythoner和accounting类集成了classmate的所有属性和方法。
说完了继承类的定义,我们再来看看实例化和调用,我们看上面右侧那张小图,我们分别实例化了两个对象,eva和sweet,注意看红框框里我们实例化的是pythoner和accounting这两个派生类,但是我们却可以调用classmate的eat和drink方法,而且我们在occupation中也可以使用父类的name属性。magic!代码贴出来你们自己拿去玩儿~
1 class classmate(): 2 def __init__(self): 3 self.name = name 4 5 def eat(self): 6 print ‘%s is eating.‘%self.name 7 8 def drink(self): 9 print ‘%sis drinking‘%self.name 10 11 12 class pythoner(classmate): 13 14 def occupation(self): 15 print ‘%s is a pythoner.‘%self.name 16 17 class accounting(classmate): 18 19 def occupation(self): 20 print ‘%s is a accounting.‘%self.name 21 22 eva = pythoner(‘eva‘) 23 eva.occupation() 24 eva.eat() 25 eva.drink() 26 27 sweet = accounting(‘sweet‘) 28 sweet.occupation() 29 sweet.eat() 30 sweet.drink()
标签:
原文地址:http://www.cnblogs.com/Eva-J/p/5034960.html