二:面向对象之继承

    今日内容        1,OOP 的三大特性            封装 , 继承 , 多态            1,面向对象之继承                1》继承是一种关系,描述对象之间 什么是什么的关系                例如:a继承了b, a就能直接使用b已经存在的方法和属性                      a称之为子类,b称之为父类,也称之为基类                2》为什么要使用继承:                    其目的是为了重用已经有的代码,提高重用性                3》如何使用继承:                    语法   class 类名称(父类的名称):                                类的内容                ps:在python中 一个子类可以同时继承多个父类                4》继承之抽象                        抽象:不具体,不清晰,很模糊,看不懂                        抽象类:将多个子类中相同的部分,进行抽取,形成一个新的类,这个过程也称之为抽象的过程                        正确的使用继承:                        ?  1.先抽象在继承                        ?  2.继承一个已经现存的类,扩展或是修改原始的功能                        ps:属性的查找顺序 :                                对象自己的 - > 所在类中 -> 找父类 - >父类的父类 ->Object                5》派生                        当一个子类中出现了与父类中不同的内容时,这个子类就称之为派生类                        所以派生类指的就是子类                        通常子类都会写一些新的代码,不可能和父类完全一样 , 既通常都是派生类

                6》 覆盖                        也称之为重写 overrides                            当子类出现了与父类名称完全一致的属性或是方法                        ps:当你继承一个现有的类,并且你覆盖了父类的init方法时,                            必须在初始化方法的第一行调用父类的初始化方法,并传入父类所需的参数 *****

                7》组合                        也是一种关系,描述两个对象之间 是什么有什么的关系                        将一个对象作为另一个对象的属性,(既什么有什么)

                        组合的目的:                                也是为了重用现有代码                                什么时候使用继承:分析两个类的关系,到底是不是:什么是什么的关系                                什么时候使用组合:如果两个类之间 没有太大的关系,完全不属于同类                                另外组合相比继承,耦合度更低了                8》菱形继承                        python支持多继承                        1,新式类:python3中任何类都是直接或间接继承了Object                                    新式类,任何显式或隐式地继承自object的类就称之为新式类,                                    python3中全都是新式类                        2,经典类,既不是Object的子类 ,仅在python2中出现

                        ps:当出现了菱形继承时,新式类,先深度,当遇到了共同父类时就广度

?                          经典类,就是深度优先

            重点实例:                    class Parent:                        text = ‘abc‘

                        @classmethod                        def say_something(self):                            print(‘anything‘)

                    class Sub(Parent):                        def show_info(self):                            # 方式1                            print(super(Sub, self).text)                            super(Sub, self).say_something()                            # 访问方式2 最常用的                            print(super().text)                            super().say_something()                            # 方式三(了解)                            print(Parent.text)                            Parent.say_something(self)                    # sub = Sub()                    # sub.show_info()

                    # print(Parent.text)                    p = Parent()                    p1 = Parent.say_something()                    print(p1,id(p1))                总结:子类中访问父类的内容

                        语法:

                        ```python                        方式1:                        super(当前类名称,self).你要调的父类的属性或方法                        方式2:                        super().你要调的父类的属性或方法                        方式3:                        类名称.你要调的父类的属性或方法(self)                        #方式3与继承无关                调用方式案例:                class Person:                    def __int__(self, name, age, gender):                        self.name = name                        self.age = age                        self.gender = gender

                    def aa(self):                        print(‘aa.run‘)

                    def say_hi(self):                        print(‘name:%s,age:%s,gender:%s‘ % (self.name, self.age, self.gender))

                class Student(Person):

                    def __init__(self, name, age, gender, number):                        super().__int__(name, age, gender)                        self.number = number

                    def say_hi(self):                        super().say_hi()                        print(‘number:%s‘ % self.number)

                # p = Student(‘222‘, ‘21‘, ‘xxx‘, ‘w‘)                # p.say_hi()                p = Student(‘222‘, ‘21‘, ‘xxx‘, ‘w‘)                p.aa()

                组合实例:  class Phone:                                def __init__(self,price,kind,color):                                    self.price = price                                    self.kind = kind                                    self.color = color

                                def call(self):                                    print(‘呼叫四块五的妞!‘)

                                def message(self):                                    print(‘正在发送短信‘)

                            class Student:

                                def __init__(self,name,age,phone):                                    self.name = name                                    self.age = age                                    self.phone = phone

                                def sh_info(self):                                    print(‘name:%s,age:%s‘ % (self.name, self.age))

                            phone = Phone(10000, ‘apple‘, ‘w3‘)                            stu1 = Student("rose",  "male", phone)                            stu1.phone.call()                            stu1.sh_info()

原文地址:https://www.cnblogs.com/Fzhiyuan/p/11247390.html

时间: 2024-11-12 10:49:14

二:面向对象之继承的相关文章

C++ Primer 学习笔记_31_面向对象编程(2)--继承(二):继承与构造函数、派生类到基类的转换 、基类到派生类的转换

C++ Primer 学习笔记_31_面向对象编程(2)--继承(二):继承与构造函数.派生类到基类的转换 .基类到派生类的转换 一.不能自动继承的成员函数 构造函数 拷贝构造函数 析构函数 =运算符 二.继承与构造函数 基类的构造函数不被继承,派生类中需要声明自己的构造函数. 声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类成员的初始化调用基类构造函数完成(如果没有给出则默认调用默认构造函数). 派生类的构造函数需要给基类的构造函数传递参数 #include <iostream

面向对象_继承

一.继承的基本概念: 1.继承是面向对象的三大特性之一  2.被继承的类称为父类(超类),继承父类的类称为子类(派生类)  3.继承是指一个对象直接使用另一个对象的属性和方法(继承之后才能使用) 4.通过继承可以实现代码重用 二.使用继承的要求 1.将每个类的共性提取出来单独放在一个类中来描述 2.然后让这个类与其他每个类之间有点关系这样就可以了 3.注意:千万不要为了获取其他类的功能,简化代码而继承 4.必须是类与类之间有所属关系才可以继承 5.例如:将学生和工人的共性(共同属性,共同方法)描

黑马程序员——Java基础---面向对象之继承

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流!                                                                 面向对象之继承  一:继承(extends) (1)继承的体系结构:就是对要描述的事物进行不断的向上抽取,就出现了体系结构.

javascript面向对象程序设计——继承初步(by vczero)

上一篇说了javascript的封装,没有刻意去说javascript的“共有函数”.“私有函数”,因为个人觉得这只是作用域的问题,我们不能刻意的模仿强类型语言(C++/JAVA)而去编写代码.尊重每一门语言的特性才是最为重要的. 一.基于prototype原型的继承 1 var Person = function(name, age){ 2 this.name = name; 3 this.age = age; 4 } 5 6 Person.prototype = { 7 addUser: f

C++ Primer 学习笔记_69_面向对象编程 --继承情况下的类作用域

面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:如果不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这种类作用域的层次嵌套使我们能够直接访问基类的成员,就好像这些成员是派生类成员一样: Bulk_item bulk; cout << bulk.book() << endl; 名字book的使用将这样确定[先派生->后基类]: 1)bulk是Bulk_item类对象,在Bulk_item类中查找,找不到名

面向对象--多继承&amp;派生类对象内存布局分析&amp;各基类指针所指向的位置分析

背景 原文链接:ordeder  http://blog.csdn.net/ordeder/article/details/25477363 关于非虚函数的成员函数的调用机制,可以参考: http://blog.csdn.net/yuanyirui/article/details/4594805 成员函数的调用涉及到面向对象语言的反射机制. 虚函数表机制可以查看下面这个blog: http://blog.csdn.net/haoel/article/details/1948051 总结为: 其一

C++ Primer 学习笔记_69_面向对象编程 -继承景况下的类作用域

面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:如果不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这种类作用域的层次嵌套使我们能够直接访问基类的成员,就好像这些成员是派生类成员一样: Bulk_item bulk; cout << bulk.book() << endl; 名字book的使用将这样确定[先派生->后基类]: 1)bulk是Bulk_item类对象,在Bulk_item类中查找,找不到名

轻松学习JavaScript十三:JavaScript基于面向对象之继承(包含面向对象继承机制)

一面相对象继承机制 今天算是什么都没干,尽在了解面向对象三大特性之一的继承了,过去的学习的C++和C#都是正统的面向对象语 言,学习的时候也没有怎么深入了解过,只是简单的学习最基础的继承.下午在看继承机制的时候,看到一个很经典 的继承机制实例.这个实例使用UML很好的解释了继承机制. 说明继承机制最简单的方式是,利用一个经典的例子就是几何形状.实际上,几何形状只有两种,即椭圆形(是圆 形的)和多边形(具有一定数量的边).圆是椭圆的一种,它只有一个焦点.三角形.矩形和五边形都是多边形的一种, 具有

探讨 JS 的面向对象中继承的那些事

最近学了 JS 的面向对象,这篇文章主要是探讨 JS 的面向对象中继承的那些事. JS中继承的特点: 1.子类继承父类: 2.子类可以用父类的方法和属性 3.子类的改变可以不影响父类 下面用一个例子来说明 JS 的继承 这段代码创建了一个父类以及它的原型,同时还创建了一个子类,并继承了父类的私有属性 1 <script> 2 //这是父类 3 function Father(name,age,marry){ 4 this.name=name; 5 this.age=age; 6 this.ma