鱼C论坛

 找回密码
 立即注册
查看: 3052|回复: 19

[技术交流] 《零基础入门学习Python》38讲内容归纳

[复制链接]
发表于 2015-11-16 14:32:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 醉酒青牛 于 2015-11-16 14:32 编辑

小牛有话说:
        各位鱼油,大家好。我是小牛,如果您已经看完或者正在看鱼神的《零基础入门学习Python》视频,想随时复习前面的知识点却又不想花太多时间和精力重翻视频,来这里《零基础入门Python学习》整理瞅瞅小牛呕心做的的视频内容的总结吧^_^,如果觉得有用的话,可以点击所属淘贴右上角的“订阅”按钮,这样以后就能够随时看到小牛做的最新的整理了。
       年底恰逢各种项目结题,近两周内没有时间和精力更新帖子,这里对关注小牛帖子鱼油们说声抱歉了,后面小牛会尽力加快更新速度,争取在11月份更完类和对象部分。
本期主要内容导读:
        这一期我们归纳一下鱼神第三十八讲“类和对象:继承”。这一期里面鱼神主要是介绍了Python继承的机制及处理继承过程中子类和父类成员重名问题以及多重继承。下面我们就来详细介绍一下各个知识点吧~~~~~~
1. 继承的概念及使用方法:
        在Python中一个类如果想使用前面一个类所有的方法和属性就需要使用继承,继承的定义为 class DerivedClassName(BaseClassName):,这样子类对象就可以直接使用基类所有的方法和属性了,但需要注意的是,如果子类内定义的方法和属性与基类重复,则将直接使用子类本身的方法和属性,举例说明:
>>> class Parent:
        def base_func(self):
                print('正在调用基类Parent的方法...')       
>>> p = Parent()
>>> p.base_func()
正在调用基类Parent的方法...
>>> class Child1(Parent):
        pass
>>> c = Child1()
>>> c.base_func()
正在调用基类Parent的方法...

>>> class Child2(Parent):
        def base_func(self):
                print('正在调用子类Child2的方法...')
>>> c2 = Child2()
>>> c2.base_func()
正在调用子类Child2的方法...
2. 解决子类继承父类中重名成员问题
        在有些时候,子类内的成员和父类的重复,但我们需要子类能够继承父类的方法,例如我们定义一个Fish类,使用构造函数初始化鱼的位置,再定义鱼是如何移动的。在接下来定义Shark类的时候直接继承Fish类的属性和方法,同时也定义鲨鱼构造函数来初始化鲨鱼是饥饿并定义eat方法来定义鲨鱼吃的问题。这里面父类Fish和子类Shark的方法同名,而我们需要Shark在保留自身构造方法同时也继承父类构造方法。在这里Python给出了两种解决办法:调用未绑定的父类方法和使用super方法。
        使用未绑定的父类方法主要是指通过父类名调用父类的方法,举例说明:
  1. import random as r
  2. class Fish:
  3.     def __init__(self):
  4.         self.x = r.randint(0,10)
  5.         self.y = r.randint(0,10)
  6.         print('我的初始位置在%d,%d'%(self.x,self.y))
  7.     def move(self):
  8.         self.x -= 1
  9.         self.y -= 1
  10.         print('我移动一次后的位置在%d,%d'%(self.x,self.y))
  11. class Shark(Fish):
  12.     def __init__(self):
  13.         Fish.__init__(self)   #调用父类未绑定的方法
  14.         self.hungry = True
  15.     def eat(self):
  16.         if self.hungry:
  17.             print('能吃是吃货的世界里最幸福的事情...')
  18.             self.hungry = False
  19.         else:
  20.             print('吃撑了,不能再吃了,我要睡了...')
复制代码

>>> shark = Shark()
我的初始位置在0,8
>>> shark.move()
我移动一次后的位置在-1,7
>>> shark.eat()
能吃是吃货的世界里最幸福的事情...
>>> shark.eat()
吃撑了,不能再吃了,我要睡了...
        这里面我们可以使用Fish.__init__(shark)来代替在子类Shark内调用父类未绑定的方法形式,例如:
  1. import random as r
  2. class Fish:
  3.     def __init__(self):
  4.         self.x = r.randint(0,10)
  5.         self.y = r.randint(0,10)
  6.         print('我的初始位置在%d,%d'%(self.x,self.y))
  7.     def move(self):
  8.         self.x -= 1
  9.         self.y -= 1
  10.         print('我移动一次后的位置在%d,%d'%(self.x,self.y))
  11. class Shark(Fish):
  12.     def __init__(self):
  13. #        Fish.__init__(self)
  14.         self.hungry = True
  15.     def eat(self):
  16.         if self.hungry:
  17.             print('能吃是吃货的世界里最幸福的事情...')
  18.             self.hungry = False
  19.         else:
  20.             print('吃撑了,不能再吃了,我要睡了...')
复制代码

>>> shark = Shark()
>>> Fish.__init__(shark)    #在类外调用父类未绑定的方法
我的初始位置在3,9
>>> shark.move()
我移动一次后的位置在2,8
>>> shark.eat()
能吃是吃货的世界里最幸福的事情...
>>> shark.eat()
吃撑了,不能再吃了,我要睡了...
        使用super()方法同样能实现上述功能,而且不需要使用父类名,程序自动对父类进行调用,强烈推荐此方法,该代码如下:
  1. import random as r
  2. class Fish:
  3.     def __init__(self):
  4.         self.x = r.randint(0,10)
  5.         self.y = r.randint(0,10)
  6.         print('我的初始位置在%d,%d'%(self.x,self.y))
  7.     def move(self):
  8.         self.x -= 1
  9.         self.y -= 1
  10.         print('我移动一次后的位置在%d,%d'%(self.x,self.y))
  11. class Shark(Fish):
  12.     def __init__(self):
  13. #        Fish.__init__(self)
  14.         super().__init__()      #调用super方法
  15.     self.hungry = True
  16.     def eat(self):
  17.         if self.hungry:
  18.             print('能吃是吃货的世界里最幸福的事情...')
  19.             self.hungry = False
  20.         else:
  21.             print('吃撑了,不能再吃了,我要睡了...')
复制代码

3.多重继承
        在Python里面子类可以同时继承多个基类,其形式为 ‘’class derivedClassName(BaseName1,BaseName2,...)‘’举例说明:
x
>>> class Base1:
        def fool1(self):
                print('我是fool1,我为Base1代言...')               
>>> class Base2:
        def fool2(self):
                print('我是fool2,我为Base2代言...')               
>>> c = Derived()
>>> c.fool1()
我是fool1,我为Base1代言...
>>> c.fool2()
我是fool2,我为Base2代言...
        然而,由于多重继承会继承不同父类内的方法和属性,很容易引起代码冲突和异常,因此对多重继承请慎用!!!

评分

参与人数 1荣誉 +1 收起 理由
学学看看 + 1 请不要无意义灌水!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-17 13:48:29 | 显示全部楼层
有一阵子没来,
又能和青牛兄一起进步了!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-18 16:21:21 | 显示全部楼层
在3的版本后,很多都使用super方法,同时也可以有效的避免多重继承的问题,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-11-18 17:25:29 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-18 17:26:07 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-27 08:43:46 | 显示全部楼层
加油~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-2-17 16:45:50 | 显示全部楼层
不错不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2016-2-17 16:55:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-5 00:22:52 | 显示全部楼层
学习了,配合视频看,非常有用,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-14 10:05:38 | 显示全部楼层
class Base1:
        def fool1(self):
                print('我是fool1,我为Base1代言...')               
>>> class Base2:
        def fool2(self):
                print('我是fool2,我为Base2代言...')               
>>> c = Derived()
>>> c.fool1()
我是fool1,我为Base1代言...
>>> c.fool2()
我是fool2,我为Base2代言...、


这个 c = Derived()没有继承啊!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-23 10:18:23 | 显示全部楼层
简洁有效
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-23 10:30:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-23 10:31:36 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-27 18:01:10 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-29 17:10:31 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-29 17:12:14 | 显示全部楼层
好好学习天天向上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-10 20:13:34 | 显示全部楼层
一直都没明白构造函数是什么,有啥特征,怎么使用,以及为什么使用,跟其他函数有什么区别~~大神能解答一下么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-2 09:16:34 | 显示全部楼层
class是类的定义,而不是继承的定义吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-2 11:06:00 | 显示全部楼层
赞一个!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-22 10:38:03 | 显示全部楼层
mark 支持下楼主 类开始好难学啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 08:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表