博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python中的继承
阅读量:6251 次
发布时间:2019-06-22

本文共 2245 字,大约阅读时间需要 7 分钟。

继承:

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

继承的定义:

已经定义了一个父类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();...         ...     ... >>>

 

 

 

转载地址:http://tmysa.baihongyu.com/

你可能感兴趣的文章
文件与二进制流互转
查看>>
获取页面中所有dropdownlist类型控件
查看>>
【转自ITPUB】SYNONYM关于underlying table权限的小小发现
查看>>
C语言函数参数传递之痛
查看>>
halcon图像合并(贴图到指定位置)
查看>>
stark组件(2):提取公共视图函数、URL分发和设置别名
查看>>
描述符应用 -- 让python变成一个强类型的语言
查看>>
若一个M*N的举证当中某个元素为零,则将其所有的行和列清零。
查看>>
android——使用Interceptor设置缓存来给服务器减负
查看>>
样式独立性的解决方案
查看>>
解决Json的DateTime格式问题
查看>>
maven的安装与使用
查看>>
RHEL7恢复root密码
查看>>
依赖注入方法
查看>>
Modelsim使用常见问题集锦(实时更新)
查看>>
刷leetcode是什么样的体验?【转】
查看>>
VS Code开发技巧集锦【转】
查看>>
linux内核数据结构之kfifo【转】
查看>>
c++学习笔记(新手学习笔记,如有错误请与作者联系)
查看>>
java集合复制和反转
查看>>