码迷,mamicode.com
首页 > 编程语言 > 详细

python面向对象(三)之继承

时间:2017-12-08 23:05:24      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:耦合度   实现   str   python   多次   基本   特点   语法   大小   

继承

介绍

  继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。继承即常说的is-a关系。子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法,使得子类具有父类相同的行为。

 例子:
  比如可以先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。

 继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作),我们称被继承的类A为基类、父类或超类,而称继承类B为A的派生类或子类。

 表示父类和子类的术语:父类和子类、超类和子类、基类和派生类,他们表示的是同一个意思。

为什么需要继承

  开发动物类,其中动物分别为企鹅以及老鼠,要求如下:
  企鹅:属性(姓名,id),方法(吃,睡,自我介绍)
  老鼠:属性(姓名,id),方法(吃,睡,自我介绍)
企鹅和老鼠都是动物我们是不是可以写一个动物类,这样代码是不是简洁了许多。有的人说我就想单独建两个类写这个属性,我只能告诉你可以,但这好比,你父亲给你了几百万,你偏不要,把这些钱扔了非要自己去挣,你想这样我也没办法。既然java给我们提供了继承我们就要好好用这样会大大提高我们的开发效率,比如:维护性提高了,代码也更加简洁,提高代码的复用性也提高了(复用性指可以多次使用,不用再多次写同样的代码)。

作用:

  1、继承可以减少重复的代码。比如父类已经提供的方法,子类可以直接使用,不必再去实现。

  2、继承是多态性的前提。当然使用继承的同时也提高了类的耦合度。

  当你不需要父类的属性时,可以覆盖调原属性。

python继承

   继承分为多继承和单继承,而python就属于多继承。python也和java有些区别,在这里也说一下

特点:

? 1:继承语法 class 派生类名(基类名)://... 基类名写作括号里,基本类是在类定义的时候,在元组之中指明的,新式类的基类默认是有object的,同时基类右多个的话就为多继承

? 2:在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。有别于java,java是自动调用初始化方法的。

  3:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数

  4:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。

初始化

  第一种方法:基类名.__init__(self,arg)

class A(object): # 新式类
    """基类"""
    def __init__(self, name, age):
        # super(A, self).__init__()
        self.name = name
        self.age = age

        
class B(object):
    """基类"""

    def __init__(self, height):
        self.height=height
        
class C(A):
    """继承一个,单继承"""
    def __init__(self, name, age, sex):
        A.__init__(self, name, age) #第一种方法
        self.sex = sex

class D(A,B):
    """继承一个,单继承"""
    def __init__(self, name, age, sex,height):
        A.__init__(self, name, age) #第一种方法
        B.__init__(self, height)
        self.sex = sex

第二种方法:supper关键字 即 supper(obj,self).__init__(arg)

class A(object): # 新式类
    """基类"""
    def __init__(self, name, age):
        super(A, self).__init__()
        self.name = name
        self.age = age

        
class B(object):
    """基类"""

    def __init__(self, height):
        self.height=height
        
class C(A):
    """继承一个,单继承"""
    def __init__(self, name, age, sex):
        super(C, self).__init__(name, age)  #第二种方法
        self.sex = sex

class D(A,B):
    """继承一个,单继承"""
    def __init__(self, name, age, sex,height):
        super(D, self).__init__(name, age) #第二种方法
        # 使用此方法只能初始化第一个基类,第二个基类如果有不一样的参数就无法初始化,建议使用第一种
        self.sex = sex

注:单继承时推荐第二种,多继承时使用第一种

多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。java的多继承是通过实现多个接口实现的。

isinstance(a,b)

可以判断判断一个变量的类型,可以用来判断a是否为b的实例对象,返回True或False

type()

函数获取变量的类型,返回变量的类型

python面向对象(三)之继承

标签:耦合度   实现   str   python   多次   基本   特点   语法   大小   

原文地址:http://www.cnblogs.com/yangliguo/p/8007303.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!