博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象
阅读量:4327 次
发布时间:2019-06-06

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

1.类:

  • 具有相同属性和方法的一类事物(框架 模子)

1.1抽象类:

同事之间的代码规范问题 抽象类的主要就是作为基类/父类,来约束子类中必须实现的某些方法抽象类的特点:        1.必须在类定义的时候指定 metaclass = ABCMeta        2.必须在约束的方法上加上@abstractmethod

1.2pytoh2中的经典类和新式类:

经典类:    1.没有mro也没有super    2.继承关系遵循深度优先算法    3.不主动继承object的类都是经典类新式类:    1.所有继承object类的都是新式类    2.和py3一样循环mro顺序和c3算法    3.有mro算法,但是super的使用必须传参数--->super(子类名,对象名).方法名

1.3python3中的新式类:

1.不需要主动继承object类,默认继承object2.py3中super()可以直接使用3.所有的新式类都继承object类 <-----> 所有继承object类的都是新式类

1.4接口类:

更接近java中接口概念:1.python中由于有个抽象的多继承,不需要借口的慨念了2.一个基类写出来被子类多继承了:接口类 并且在方法中只写pass(你可以选择的满足)java中不支持多继承,新的概念  接口  Interface1.只定义一个接口名字(基类),内部定义子类必须实现的方法2.接口支持多继承3,接口内部的所有方法都不能写出具体的代码,只能用pass代替

对象:

  • 对象就是一个具体的例子(拥有具体的属性值和具体的方法).  对象就是类的实例化
  • 实例完全和对象一样

对象可以做什么:

调用对象的属性调用类中的方法(动态属性)

对象的属性:

储存在实例化以后创建的空间中的所有变量都是对象的属性每一次实例化产生的空间都是独立的,每一个对象都有自己的属性值

实例化:

是由类创建对象的过程

实例化的过程:

对象名 = 类名(参数)创建一个属于对象的空间将这个空间的地址和参数传递给__init__方法执行init方法将对象的空间返回给对象名

静态属性:

  • 所有的这个类的对象都共有的属性

  • 尽量用类名来操作静态属性
  • 对象操作静态属性:只要给"对象,属性名"赋值就相当于新建对象属性,而不是修改静态属性

动态属性:

定义在类中的函数,自带一个self参数,就是调用这个方法的对象本身

类的命名空间:

静态属性/动态属性(方法)

对象的命名空间:

对象的属性

类指针:对象能够通过这个类指针找到类

组合:

  两个类的对象,其中一个类的对象的属性是另一个的对象

面向对象的三大特性:

1.继承

继承就是为了解决类与类之间代码重复的问题

1.1类的继承语法:

单继承class A:passclass B(A):passprint(B.__bases__)​​​在定义类的时候加(),括号写的类就是继承的类B类继承A类A类: 父类 基类 超类B类: 子类 派生类​多继承class C:passclass D:passclass E:(C,D):passprint(E.__bases__)​​​子类可以继承父类的方法和属性实例化的执行流程:先开辟一块空间,并且空间中已经又了一个类指针,指向Cat执行__init__方法,在Cat类的空间中没有init方法,找父类中的init将空间返回给对象

1.2子类调用方法:

,如果子类中自己有用自己的,用了自己的就不用父类的了,如果子类中没有才调用父类的如果子类有个性化的父类没有的方法,可以单独定义在子类中----派生方法只有子类能够使用父类的方法,父类不可以使用子类中的方法当某一个方法,父类和子类都拥有的时候,那么在子类的方法中,调用父类的同名方法    1.父类名.方法名(self....)    2.super().sleep(....)

2.多态:

1.python中处处是多态,python是一门自带多态的语言2.几个类拥有同名的方法,可以写一个函数,来统一进行调用 ----归一化设计3.是为了代码不出错,只要你能够顺利的调用这个函数,那么内部的执行力就大大          降低出错的概率4.python中更多的不是硬性的规定,但是可能会因为传递的参数不符合规则而使代码报错,但是大大降低了代码的繁琐程度

3.封装:

  • 广义上:把一类事物的相同事务的行为和属性归到一个类中
  • 狭义上:把一些特殊的属性和方法藏在类中,外部无法调用,只有内部可以调用

3.1隐藏静态属性:

  • 只要在类的内部的名字前面加上双下划线,那么这个名字就变成私有的(只能在类的内部使用,不能在类的外部使用)
  • 在定义的时候,存储在名字就会发生变化__类名__名字因此在类的内部就不会被调用到了
  • 在类的内部使用__名字,默认就被改成__类名__名字
  • 只能在类的内部被调用,保证了类的内部数据的安全,不会被别人随意修改
  • 私有静态属性:为了不随意被外部修改
  • 私有方法: 不希望被外部修改
  • 私有的对象属性:1.不希望某个值被随便修改  2.不希望某个值被从类的外部看到

鸭子类型:

  • 是python中特有的,不依赖于继承和规范来进行的一种约定(依赖继承和规范特指:java中的多态和接口)
  • 中心思想:不同类之间的相同方法都应该用同一个名字
  • 鸭子类类型:不需要解决类的对象的传参问题,就可以直接利用已经实现的"不同类之间的相同方法都用同一个名字"
  • 接口类规范:不同类之间的相同方法都应该是同一个名字
  • 抽象类规范:不同类之间的相同方法都应该用同一个名字

PEP8规范:

  • 跨环境 无乱是在py2中还是py3中定义一个新式类,都需要加上object这个继承

 内置方法的特点:

  • 一定有一个语法或者一种写法自动触发这个方法

 常用的一些内置方法:

  • __new__\__init__   构造方法(单例模式)\初始化方法
  • __call__    对象名字加上括号就可以调用
  • del  对象  __del__ 析构方法\对象删除之前的收尾工作
  • __str__  print(对象)   让一个对象的显示更加清晰
  • str(对象)   "%s"%对象
  • repr() __repr__   是__str__的备胎
  • len(对象)   __len__
  • __**item__系列      对象[参数]
  • __eq__   ==

转载于:https://www.cnblogs.com/hard-up/p/10054359.html

你可能感兴趣的文章
实验三
查看>>
机器码和字节码
查看>>
环形菜单的实现
查看>>
【解决Chrome浏览器和IE浏览器上传附件兼容的问题 -- Chrome关闭flash后,uploadify插件不可用的解决办法】...
查看>>
34 帧动画
查看>>
二次剩余及欧拉准则
查看>>
Centos 7 Mysql 最大连接数超了问题解决
查看>>
thymeleaf 自定义标签
查看>>
关于WordCount的作业
查看>>
C6748和音频ADC连接时候的TDM以及I2S格式问题
查看>>
UIView的layoutSubviews,initWithFrame,initWithCoder方法
查看>>
STM32+IAP方案 实现网络升级应用固件
查看>>
用74HC165读8个按键状态
查看>>
jpg转bmp(使用libjpeg)
查看>>
linear-gradient常用实现效果
查看>>
sql语言的一大类 DML 数据的操纵语言
查看>>
VMware黑屏解决方法
查看>>
JS中各种跳转解析
查看>>
JAVA 基础 / 第八课:面向对象 / JAVA类的方法与实例方法
查看>>
Ecust OJ
查看>>