types.BuiltinFunctionType True >>> type(lambda x: x)==types.LambdaType True >>> type((x for x in range(10 ] 89 >>> f[100] 573147844013817084101 如果要实现list的切片方法: >>> list(range(100))[5:10] [5, 6, 7, 8, 9] 对于Fib ] [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] 但是没有对step参数作处理: >>> f[:10:2] [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, Month.Jun , 6 Jul ==> Month.Jul , 7 Aug ==> Month.Aug , 8 Sep ==> Month.Sep , 9 Oct ==> Month.Oct , 10 metaclass是Python面向对象里最难理解,也是最难使用的魔术代码。
面向对象初识别 面向过程vs函数式编程 面向机器 抽象成机器指令,机器容易理解 代表: 汇编语言 面向过程 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如果出现了 # 面向过程编程 测量对象的元素个个数。 面向过程:开发成本高,解决问题局限性小 面向对象:开发成本低,解决问题局限于对象 问题:’abc’ => {‘a’, ‘b’, ‘c’} 面向过程: 手撸 面向对象:str => list => set 开发:优选面向对象(找解决问题的对象), 再考虑找多个对象(面向对象与面向过程的结合), 最后自己去封装一个可以解决问题的对象(对外是面向对象的体现,内部解决问题的核心是面向过程 继承关系 面向对象的继承 什么是继承? 继承(英语:inheritance)是面向对象软件技术当中的一个概念。
1.面向对象简介 Python是一门面向对象的编程语言 所谓面向对象的语言,简单理解就是语言中的所有操作都是通过对象来进行的 面向过程: 面向过程指将我们的程序分解为一个一个步骤,通过对每个步骤的抽象来完成程序 往往复用性比较低 这种编程方式符号人类的思维,编写起来比较容易 1.妈妈穿衣服穿鞋出门 2.妈妈骑上电动车 3.妈妈到超市门口放好电动车 4.妈妈买西瓜 5.妈妈结账 6.妈妈骑电动车回家 7.到家孩子吃西瓜 面向对象的编程语言 ,关注的是对象,而不注重过程,对面向对象一切皆对象 以上方式可以用 孩子妈妈给孩子买瓜来解决 面向对象的编程思想,将所有功能统一保存到对应的对象中,要使用某个功能,直接找到对应的对象即可 这种编码方式比较容易阅读 类就是对象的图纸 我们也称对象是类的实例(instance) 如果多个对象是通过一个类创建的,我们称这些对象是一类对象 类也是一个对象,类就是用来创建对象的对象 可以像对象中添加变量,对象中的变量称之为属性 ,2.如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值。
这个原则声明对象不应该知道它协作对象的内部细节。它被著名地称为——与朋友交流,不要和朋友的朋友交流。类应该只能调用它正在协作的类的公共数据成员。不应该被允许访问由那些数据成员组成的类的行为或数据。
这个原则声明对象不应该知道它协作对象的内部细节。它被著名地称为——与朋友交流,不要和朋友的朋友交流。类应该只能调用它正在协作的类的公共数据成员。不应该被允许访问由那些数据成员组成的类的行为或数据。
一、初识面向对象 1.1什么是面向对象 之前都是在讲基础语法,今天终于到了java重中之重的面向对象系列。 我们都知道Java是一门面向对象的语言, 面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。 用面向对象的思想来编写程序,不仅符合人们的认知,并且也有利用对程序的设计、扩展、以及维护。 面向对象程序的三大特性: 封装、继承、多态。 1.2 面向过程与面向对象 面向过程:更加注重于用代码解决问题的具体过程。适用于解决那些需要注重过程的问题 面向对象:更加注重于用代码解决问题的结果。 注意:面向过程与面向对象并不是一门语言,而是解决问题的方法。没有那个好坏之分,都有其专门的应用场景。
---- 面向过程实现 ---- 面向对象 ---- 面向对象不仅仅可以 “把大象装进冰箱” ---- 只要你想啥都可以放到任何里面 ---- 可以看出,过程不适合反复使用,对象则适合传参及反复调用。 扩展:除了以上面向对象的方法,还有对象的静态方法,对象的静态属性,私有方法和私有属性 new.target 属性等。我们以后会给大家再聊聊这些使用方法。
使用slots 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。 class Student(object): pass 还可以尝试给实例绑定一个方法: >>> def set_age(self, age): # 定义一个函数作为实例方法 ... self.age = age ... >>> from types import MethodType >>> s.set_age = MethodType(set
面向对象 特性 class object 封装、继承、多态 语法:属性、方法 构造函数(在实例化时做一些类的初始化的工作 该函数是用于传参数) 析构函数(在实例释放、销毁的时候自动执行的、通常用于一些收尾工作 def __init__(self,name,sex,age,job,cn ="china"): 7 self.name ='' 8 pass View Code 面向对象编程 OOP编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑 面向对象的几个核心特性如下 Class 类 一个类即是对一类拥有相同属性的对象的抽象、蓝图、原型。 ,里面包含着类的数据和方法 Inheritance 继承 一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承 Polymorphism 多态 多态是面向对象的重要特性,简单点说:“一个接口
1、OOP 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计) 1.1、面向对象编程介绍 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起 面向对象编程(Object Oriented Programming-OOP)是一种解决软件复用的设计和编程方法。 面向对象的理解: 面向对象是一种设计思想 1.符合人们的思考习惯 2.把执行者变成指挥者 3.简化功能,把复杂的事情简单化 面向对象有三大特征: 1.封装 2.继承 3.多态 1.2、类和对象 面向对象编程的 2个非常重要的概念:类和对象 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类 类就相当于制造飞机时的图纸,用它来进行创建的飞机就相当于对象 的基础上可以完成一些其它初始化的动作,__init__不需要返回值 • 我们可以将类比作制造商,__new__方法就是前期的原材料购买环节,__init__方法就是在有原材料的基础上,加工,初始化商品环节 10
面向对象 前言 C++里面有句经典台词: 女朋友是new出来的,儿子是继承过来的 这期介绍C++面向对象的知识点,带你面向对象,今天是情人节,不用担心没对象,new一个,有了对象就会累(类),所以我还会介绍类 面向对象三个步奏:定义对象,创建对象,使用对象 本期知识简单地定义了一个女朋友类,然后创建girl对象,最后使用对象introduce 最后祝大家情人节快乐~ 目录 new和delete申请释放内存分配多个内存动态分配内存类和对象访问类型限定符类和结构体区别封装定义一个女朋友类 说到面向对象就不得不提面向对象的三大特性: 封装、继承 和 多态 类的关键字是:class 在对class描述之前需要了解到一个规则:访问控制权限 既然有访问控制权限,那就有访问类型限定符 访问类型限定符 因为class这个关键字的默认访问控制属性为private,意味着只有这个类自己和子类可以访问m_name,m_age这些变量,这个就体现了C++作为面向对象语言的封装特性,我有这个东西,可如果不是我和我儿子 10 3 abc888789!
对象的概念 创建对象的字面量语法 访问成员运算符 创建对象的构造函数语法 this关键字 添加和删除属性 delete关键字 全局对象 Number / String / Boolean Date / Math / RegEx / Array BOM window对象的属性和方法 history对象 forward() / back() / go() location对象 navigator对象 screen 对象 DOM DOM树 访问元素 getElementById() / querySelector() getElementsByClassName() / getElementsByTagName() select 事件绑定 HTML事件处理程序(不推荐使用,因为要做到标签与代码分离) 传统的DOM事件处理程序(只能附加一个回调函数) 事件监听器(旧的浏览器中不被支持) 事件流:事件捕获 / 事件冒泡 事件对象
★面向对象VS面向过程 在面向对象编程出现之前,几乎所有的程序都是以面向过程为中心的,程序的运行从某个地方开始运行达到一定的目的就结束了。而且程序的代码修改和重复使用率比较低。 面向对象把是整个世界看成一系列实体的集合,所有的个体都是对象,而对象就是具有一定属性和行为的实体的集合。 下面的表格大概的说明了面向过程(OPP)和面向对象(OOP)的区别: image.png ★面向对象编程中的类和对象 类:是一个抽象概念,比如说我们我们从各式各样的汽车中抽象出汽车的概念、由不同品种的猫抽象出猫的概念 一般情况下状态是描述具体对象而非类的,行为是有具体对象发出而不是类。 ★面向对象的三大特征 封装 制作电脑什么人最牛? 继承 在之前学习UML的时候就已经了解到了继承,在面向对象中的继承分为继承(泛化)、和组合(聚合)。
1.创建一个空对象作为 this 2.this.proto指向构造函数的prototype 3.运行构造函数 4.返回 this 以上步骤通过关键字 new 全部搞定 2.如何手动指定对象的原型链 ,创建一个新的对象 3.this 指什么 由于运行期绑定的特性,JavaScript 中的 this 含义非常多,它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式 随着函数使用场合的不同 但是有一个总的原则,那就是this,总是指向调用该方法的对象。在这里调用该放法的对象就是window,所以在这里this===window。 由于this指向由构造函数创造的实例对象,即这里的p1,p2,p3。 (4)作为对象方法调用 在 JavaScript 中,函数也是对象,因此函数可以作为一个对象的属性,此时该函数被称为该对象的方法,在使用这种调用方式时,this 自然指向该对象 var obj1 = {
什么是面向对象面向过程:根据解决问题的过程,直接设计系统。如 C 语言。面向对象:将问题分解成多个对象,设计模块化、低耦合的系统。如 java 语言。特性:封装、继承、多态。 普通内部类属于具体对象,因此不能声明 static 成员变量和方法。成员内部类依附外部类而存在。也就是说,如果要创建普通内部类的对象,就必须首先存在外部类的对象。 inner = outter.new Inner(); inner.output(); }}// 外部类 class Outter { private int num = "10 public class Test { public void test(final int b) { final int a = 10; new Thread(){ (b); }; }.start(); }}Copy to clipboardErrorCopied静态内部类静态内部类是不需要依赖于外部类,可以在不创建外部类对象的情况下创建内部类的对象
2 问题 面向过程VS面向对象 提一个问题 假如说两种鸟,一种是百灵鸟,一种是喜鹊,他们都会叫,但是声音不同,在面向对象的世界里我们应该怎么区分呢,或者说,怎么去表达这两种不同的鸟类呢。 3 java 面向对象 思考一下吧 java的开发者可能一眼就能想到应该怎么做,java是一种面向对象的编程语言,利用面向对象的继承、封装、多态的特性,我们很容易解决这个问题,毕竟这是对于面向对象最基本的应用了 三段言简意赅的代码充分展示了面向对象的代码风格,目前我们实现了面向对象的代码,继续进行面向过程的代码, 4 C 面向过程 思考一下吧 C语言的开发者可能遇到这个问题(本人JAVA,如有不妥 由此可见,面向对象的特点是修改数据结构的同时,不影响方法,也就是说添加一个类,不会对原系统的方法有影响。而面向过程在添加一个类的同时,需要修改原系统方法,但这能说明面向对象要比面向过程高级吗? 相比于面向对象,面向过程对于添加行为特征要方便的多。
当前硬件体系结构上, 无疑是有一定误导性的 各种所谓的O(n)算法, 都是"brach heavy"的, 会引起非常多的"cache miss" 举个例子, 在某些情况下, 二分查找还不如线性遍历来得快 再加上各种面向对象理论的洗脑 很多时候SOA(struct of array)比AOS(array of struct)是快的, 因为多数情况下我们遍历一个结构体数组, 只是访问其中的一个字段而已 SOA与AOS的区别, 就是面向对象与面向数据程序设计的区别之一 class vs struct 这才是面向对象与面向数据在语言层面的差异 最早认识到class性能会出问题的, 是从N3的代码里. floh有说为什么自己的引擎平台抽象层没有使用抽象类, 是因为虚函数对于主机平面的硬件架构性能很差 现在又出来个TileBasedRendering, 都是因为硬件的变化带来算法/架构上的变化 总得来说, 硬件在不断升级换代, 我们头脑也需要升级换代才能跟得上潮流 面向对象虽然加快了开发效率,但是并不是对机器友好的
1.面向过程与面向对象 1.1面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。 1.2面向对象 面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。 1.3面向过程与面向对象对比 面向过程面向对象 优点 性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机就采用的面向过程编程。 易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护 缺点 不易维护、不易复用、不易扩展 性能比面向过程低
面向对象VS面向过程 什么是面向过程? 什么是面向对象? ---- 什么是面向过程? 面向过程编程OPP:Procedure Oriented Programming,是一种以过程为中心的编程思想。 一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。当程序规模不是很大时,面向过程的方法还会体现出一种优势。因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。 ---- 什么是面向对象? 面向对象编程OOP:Object Oriented Programming,是一种以对象为基础的编程思想。主要关注“谁来做”,即完成任务的对象。 一般面向对象语言的使用者会将面向对象简单抽象为“封装”+“继承”+“多态”。但回归本源,这三个特征完全是3个相对独立的解决问题的思路。 ”封装“可以把与当前对象相关的行为都封装在当前对象内部,实现高内聚,并且还能保证对象内部细节不对外暴露,外部调用者也需要关心内部实现。
2、面向对象OOP (Object Oriented Programming) 面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。 举个栗子:将大象装进冰箱,面向对象做法。 先找出对象,并写出这些对象的功能: 1.大象对象 进去 2.冰箱对象 打开 关闭 3.使用大象和冰箱的功能 面向对象是以对象功能来划分问题,而不是步骤。 在面向对象程序开发思想中,每一个对象都是功能中心,具有明确分工。 面向对象编程具有灵活、代码可复用、容易维护和开发的优点,更适合多人合作的大型软件项目。 面向对象的特性: 封装性 继承性 多态性 3、向过程与面向对象对比 面向过程 面向对象 优点 性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机就采用的面向过程编程。 ,而用面向对象写出来的程序是一份盖浇饭。