面向对象编程 什么是面向对象? 面向过程:将需要解决的问题按步骤划分,一步一步完成每一个步骤,而且          步骤之间有联系. 优点:复杂问题可以分步完成 缺点:扩展性很差,维护性差.如果中间某一环节有问题整体都会发生问题 使用的场景:对扩展性要求较低的软件,比如系统软件,脚本程序 面向对象(oop):将程序看作一堆对象的集合,实现功能的方式就是通过对象之间的交互来实现. 优点:扩展性高.对象之间的影响几乎没有 缺点:当某些程序不需要扩展性时书写就很复杂,无法预知结果 什么是对象? 对象…
面对对象的三大特性之继承 1.什么是继承? 在程序中,继承指的是class与class之间的关系 继承是一种关系,必须存在两个class才能产生这种关系:被继承的class称为父类,继承的class称为子类. 2.为什么要使用继承? 现实中,通过继承,子可以直接使用父的内容. 在程序中,通过继承,子类可以直接使用父类已有的代码 3.如何使用继承 #继承的定义 class Father1: x = 13 print('这是父类的x', x) def coding(self): print('我是父…
类的封装 就是把数据或者方法封装起来 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度(快门就是傻瓜相机为傻瓜们提供的方法,该方法将内部复杂的照相功能都隐藏起来了,比如你不必知道你自己的尿是怎么流出来的,你直接掏出自己的接口就能用尿这个功能) 在编程语言里,对外提供的接口(接口可理解为了一个入口),就是函数,称为接口函数,这与接口的概念还不一样,接口代表一组接口函数的集合体. 两个层面的封装 第一个层面 第一个层面的封装(什么都不用做):创建类和对象会分别创建二者的…
javascript对象事件绑定方法 今天在做对象事件绑定的过程中出现了一点异外情况,由于事件方法是由参数传过来的,需要将当前对象call过去,方便方法体里直接调用this 错误写法 obj.onclick=p.click.call(作用域对象); 发现事件方法在初始化的时候就触发了,而且绑定失败. 正确的写法 ojb.onclick=function(){ p.click.call(作用域对象); }; 其实这里和作用域无关,还是绑定方法不对.所以总结了下js的对象事件绑定方法 1.内联模型…
1.属性查找 类有两种属性:数据属性和函数属性 (1)类的数据属性是所有对象共享的 #类的数据属性是所有对象共享的,id都一样 class OldboyStudent: school='oldboy' def learn(self): print('is learning') def eat(self): print('is eating') def sleep(self): print('is sleeping')s1=OldboyStudent() s2=OldboyStudent()s3=…
多态与多态性 一,多态 1,多态指的是一类事物有多种形态(python里面原生多态) 1.1动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): print('say hello') class Dog(Animal): #动物的…
[封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 1. 将变化隔离: 2. 便于使用: 3. 提高复用性: 4. 提高安全性: [封装原则] 1. 将不需要对外提供的内容都隐藏起来: 2. 把属性都隐藏,提供公共方法对其访问. 私有变量和私有方法 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) 私有变量 #其实这仅仅这是一种变形操作 #类中所有双下划线开头的名称如__x都会自动变形成:_类名__x的形式: class A: __N=0 #类的数据属性就应…
一.类中定义的函数分成两大类 一:绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定制 类.boud_method(),自动将类当作第一个参数传入 (其实对象也可调用,但仍将类当作第一个参数传入) 2. 绑定到对象的方法:没有被任何装饰器装饰的方法. 为对象量身定制 对象.boud_method(),自动将对象当作第一个参数传入 (属于类的函数,类可以调用,但是必须按照函数的规则来,没有自动传值那么一说)…
一.绑定方法: 绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数传入 1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的,自动将对象当作第一个参数传入,类也可以调用,但是不会自动传值 2.绑定给类的方法:为类中定义的函数加上一个装饰器classmethod,自动将类当作第一个参数传入,对象也可以调用,但是仍然将类当第一个参数传入 二.非绑定方法: 即不与类绑定,又不与对象绑定,意味着对象和类都可以来调用,无论谁来调用都是一个普通函数,没有自动传值的效果 import setting…
习惯了函数式,动不动传一个函数.但是直接把函数作为类方法保存,再调用时会报错. 举一个unittest时的例子 class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): print('测试\n') .... factory = make_factory(XXX) #非绑定函数必须这样用staticmethod()包装 #cls.factory = staticmethod(factory) cls.factory…