继承:

面向对象程序语言的一个重要特点是继承。继承提供了在已存在类的基础上创建新类的方法。继承的子类 拥有被继承的父类的所有方法,在此基础上,子类还可以添加自己的专有方法。继承是类的强有力的特点。一些程序不用继承将会非常复杂,用了继承,写起来就会简单扼要,通俗易懂。另外,通过继承,还可以重新利用以前编写的代码,因为你可以对父类的方法进行定制,而并非一定要修改它们。有时,继承反映了问题的自然结构,这样使程序更容易理解。任何事情都有双重性。继承也有可能使程序变得难以阅读。调用一个方法时,有时很难判断它是在哪定义的。相关的代码可能分散在几个模块中。所以,有些事情利用继承的特点能够做好,不利用继承,也可能做的不错。如果问题的自然结构不倾向于用继承解决,那么就不要用,用了反而不好。

继承的定义:

已经定义了一个父类BaseClass,那么子类的定义方式如下:

class DerivedClass(BaseClass):
......

子类别的实例化方式没有特别之处。如果要引用子类的某个属性,首先在子类中寻找,没有就去到父类中寻找它的定义,在没有的话,就一直向上找下去,知道找到为止。

方法的寻找方式与属性相同。子类的方法可以重定义父类的方法,要是你觉得父类的方法不能满足要求的话。有时候,子类的方法中可以直接调用父类中的方法,方式如下:

BaseClass.method(self,arguments)

定义一个父类:

>>> class Person:
... def __init__(self , name = None , age = 1 , sex = "men"):
... self.name = name;
... self.age = age;
... self.sex = sex;
...
... def display(self):
... print "name : %-20s" % self.name;
... print "age : %-20d" % self.age;
... print "sex : %-20s" % self.sex;
...
...
...
>>> #紧接着定义了Person的student类
>>> class Student(Person):
... def __init__(self , name = None , age = 1 , sex = "men" , grade = 0):
... Person.__init__(self , name , age , sex)
... self.grade = grade;
...
... def display(self):
... Person.display(self)
... print "grade : %-20d" % self.grade;
...
...
...
>>>

私有方法:

在C++语言中有私有方法的概念,私有方法只能被类的内部方法调用。在Python 中,类的私有方法和私有属性,不能够从类的外面调用。类的方法和属性是公有,还是私有,可以从它的名字判断。如果名字是以两个下划线开始,但并不是以两个下划线结束,则是私有的。其余的都是公有的。请看下面的例子:

>>> import math
>>> class Point:
... def __init__(self , x = 0 , y = 0):
... self.x = x;
... self.y = y;
...
... def __str__(self):
... return '(' + str(self.x) + ',' + str(self.y) + ')';
...
...
...
>>> class Line:
... def __init__(self , p1 = Point() , p2 = Point()):
... self.__p1 = p1;
... self.__p2 = p2;
...
... def __str__(self):
... return str(self.__p1) + str(self.__p2);
...
... def __distance(self):
... tx = math.pow(self.__p1.x,2) + math.pow(self.__p2.x,2);
... ty = math.pow(self.__p1.y,2) + math.pow(self.__p2.y,2);
... return math.sqrt(tx+ty);
...
... def length(self):
... print self.__distance();
...
...
...
>>>

Python中的继承的更多相关文章

  1. Python 中的继承、多态和封装

    涉及问题: Python 中如何实现多继承,会有什么问题? Python 中的多态与静态方法有什么区别? 答案要点如下: Python 中的继承,就是在定义类时,在括号中声明父类,简单示例如下: cl ...

  2. python中的继承原则

     继承是面向对象的重要特征之一,继承是两个类或者多个类之间的父子关系,子进程继承了父进程的所有公有实例变量和方法.继承实现了代码的重用.重用已经存在的数据和行为,减少代码的重新编写,python在类名 ...

  3. python中的继承和多态

    继承 继承的表现方式: class Animal(): pass class Cat(Animal): #animal是cat的父类,也可以说是基类 pass print(Cat.__bases__) ...

  4. python中多继承C3算法研究

    在python的面向对象继承问题中,单继承简单易懂,全部接受传承类的属性,并可添加自带属性, 但是,在多继承情况下,会遇到多个被继承者的顺序问题,以及多次继承后查找前几次继承者需求属性时,可能不易发现 ...

  5. python中 的继承

    1.Python的类可以继承多个类,Java和C#中则只能继承一个类. 2.Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先和广度优先. 当类是经典类时,多继承情况下,会 ...

  6. 理解Python中的继承规则和继承顺序

    先来看一段代码: class First(object): def __init__(self): print ("first") class Second(object): de ...

  7. 解释一下python中的继承

    当一个类继承另一个类,它就被称为一个子类/派生类,继承父类/基类/超类.它会继承/获取所有类成员(属性和方法) 继承能让我们重新使用代码,也能更容易的创建和维护应用 单继承:一个类继承单个基类 多继承 ...

  8. python中定义函数和参数的传递问题

    作者:達聞西链接:https://zhuanlan.zhihu.com/p/24162430来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 5.2.4 函数.生成器和类 ...

  9. Python中的类(中)

    上一篇介绍了Python中类相关的一些基本点,本文看看Python中类的继承和__slots__属性. 继承 在Python中,同时支持单继承与多继承,一般语法如下: class SubClassNa ...

随机推荐

  1. 利用KVC使用自定义的控件

    KVC简单使用: 可以用来设置属性的值例如有个Person类下有个属性name [self setvalue:@"yourname" forkey:@"name" ...

  2. 树莓派常用Linux命令

    转自小五义 1.ls命令:列出文件目录的常用命令,主要参数见下表. -a 列出目录下的所有文件,包括以.开头的隐含文件. -b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列 ...

  3. ASP.NET MVC进阶之路:深入理解Controller激活机制并使用Ioc容器创建对象

    本文标题说是"深入理解Controller"其实有点“标题党”的味道了.本篇只会探讨"Controller"的激活机制,也就是如何创建Controller的并调 ...

  4. 使用MongoDB的开源项目(转)

    根据谷歌的搜索结果筛选出来的. 统计应用 counlty https://count.ly/ mongopress 开源CMS系统 http://www.mongopress.org/ Rubedo ...

  5. SolrCloud简介

    原文地址:http://www.chepoo.com/solrcloud-introduction.html 一.简介 SolrCloud是Solr4.0版本以后基于Solr和Zookeeper的分布 ...

  6. 2^x mod n = 1 【杭电-HDOJ-1395】 附题

    /* 2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. SymmetricDS文档翻译--【Chapter 3. 具体配置(Configuration)[section C]】

    3.6. Routers 眼下的实现中提供的Route实现包括: 1.      Default Router:这个Router发送全部的数据到Router中定义的目标节点所属的组中的全部的节点. 2 ...

  8. PS图片

    第二次练习PS,不知道找什么图片,就这么做着吧.然后自己学习了下动画制作,但是中间有些问题,需要再研究研究. 像 CS6中新建蒙版文档,画出的图形单位是厘米,怎么改为像素?(答案看后续博客....)

  9. jz2440烧写开发板uboot,内核和文件系统等的相关命令

    下载文件{ftpget -u 1 -p 1 192.168.2.110 a.out a.outnfs 30000000(destination) 192.168.2.109:/home/fs/work ...

  10. Rabbit.Rpc

    .NET轻量级RPC框架:Rabbit.Rpc 最近准备写一个.NET的管理平台应用在公司,由于存在大量的Client => Server,Server => Client的请求需求在加上 ...