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

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

1. 面向对象基础

  • 类与对象
先有类再有对象python内置的相关属性:类名.__name__# 类的名字(字符串)类名.__doc__# 类的文档字符串类名.__base__# 类的第一个父类类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)类名.__dict__# 类的字典属性类名.__module__# 类定义所在的模块类名.__class__# 实例对应的类(仅新式类中)
  • 属性查找
类中数据属性是所有对象共享函数属性默认绑定给对象用的先从对象自己的名称空间找,没有再去类中找,没有就报错
  • 绑定方法
对象调用:类中函数没任何修饰以及数据属性默认是绑定给对象使用的,对象内自己的数据属性是独有的类调用:在函数上被 @classmethod修饰,即绑定类,将类作为参数传入调用规则:绑定给谁就由谁来调用,谁来调用就会将自己作为第一个参数传入
  • 非绑定方法
类中定义的函数如果被装饰器@staticmethod装饰,那么该函数就变成非绑定方法既不与类绑定,又不与对象绑定,意味着类与对象都可以来调用但是无论谁来调用,都没有任何自动传值的效果,就是一个普通函数

2.继承、派生及多态

2.1 继承

  • 定义
创建新类的方式,继承一个或者多个父类,继承了父类的功能
  • 经典类与新式类
经典类:没有继承object以及该类的子类都是经典类新式类:继承object以及该类的子类
  • 抽象与继承
将相同的属性抽取成父类,再继承

2.2 派生

  • 定义
子类自己添加新的属性,如果与父类属性重名那么以自己的为准
  • 组合与重用性
组合:在一个类中把另一个类的对象作为数据属性应用:两个类之间显著不同,其中一个类是另外一个类所需的组件,可以使用组合
  • 接口与归一化
接口:函数的集合归一化:基于同一个接口实现的类,那么这些类产生的对象在使用时,从用法上来说都一样
  • 抽象类

    只能继承不能被实例化

    2.3 继承原理(菱形继承)

  • 查找
类是经典类时,多继承情况下,按照深度优先的原则,新式类的话,广度优先的原则print(cls.__mro__) # 查看新式类的继承顺序
  • 子类调用父类的方法
1、指名道姓调用父类名.__init__(属性名。。。)2、super().__init__(属性名..)注:super()相当于super(子类名,self)

2.4 多态与多态性

多态:一类事物的多种状态多态性:每个对象用自己的方式响应共同的对象,(铃声,老师下班,学生放学)优势:同一种方式去调用可扩展性,灵活性

2.5 封装

  • 隐藏
双下划线开头的方式将属性隐藏起来,只发生于类定义阶段本质是是一个变形操作,(__属性名)成了(_类名__属性名)访问:类内部可以通过(__属性名)访问,类外部要通过(_类名__属性名)才能访问
  • 封装意义
1、封装数据:隐藏数据后,提供操作该数据的接口,在接口上附件对该数据的使用限制2、隔离复杂度,使用简单的接口

2.6 特性(property)

将@装饰在函数上,调用该函数通过函数名就可以得到返回值class Circle:    def __init__(self,radius): #圆的半径radius        self.radius=radius    @property    def area(self):        return math.pi * self.radius**2 #计算面积    @property    def perimeter(self):        return 2*math.pi*self.radius #计算周长c=Circle(10)print(c.radius)print(c.area) #可以向访问数据属性一样去访问area,会触发一个函数的执行,动态计算出一个值print(c.perimeter)
  • 封装与扩展性
类实现者可以修改封装内的东西而不影响外部调用者的代码

转载于:https://www.cnblogs.com/quqinchao/p/11257681.html

你可能感兴趣的文章
LeetCode-Recover Binary Search Tree
查看>>
Socket
查看>>
opencv 在工业中的应用:blob分析
查看>>
JavaScript Cookie
查看>>
JAVA中protected的作用
查看>>
selenium python 启动Chrome
查看>>
MySQL优化索引及优化汉字模糊查询语句
查看>>
安装cocoaPod 的问题
查看>>
vs Obsolete标识符
查看>>
IOS 深拷贝和浅拷贝应用
查看>>
深度学习优化方法
查看>>
《剑指offer》第二十八题(对称的二叉树)
查看>>
解决编译错误: 非法字符: '\ufeff' 解决方案|错误: 需要class, interface或enum
查看>>
别说我不懂排序!几种常见排序算法(一)
查看>>
JAVA学习笔记-this隐式参数
查看>>
2017.05.01
查看>>
Oracle闪回技术
查看>>
Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework
查看>>
kotlin项目开发基础之gradle初识
查看>>
poj_1458 LCS problem F.最长上升公共子序列
查看>>