python_面向对象
什么是面向对象?
-- 一种主流编程范式,编程思维框架,世界主流两个方向,面向对象和面向过程。
-- 面向是把关注点集中一个具体东西,比如看向手机,也叫面向手机,手机就是一个对象,我们
把手机的属性,比如什么牌子,长多少,宽多少,这些都是属性,然后可以打电话,刷微博,
和微信好友抢红包,这些都是功能,也称之为方法
-- 本质上是分类,所有的手机都具有以上属性,不妨把其抽象出一个手机类,然后通过这个类
具体出各种各样的手机
class Phone(object): def __init__(self, width, height, brand): self.width = width self.height = height self.brand = brand def call(self, tell_phone): print('%s call %s ing.......' % (self.brand, tell_phone)) def wei_xing(self, friends): print('talking with %s' % friends) def shua_shua(self): print('刷刷刷,从早刷到晚')
形式:
class 类
-- 一个类,也单独占用一个内存
object对象
-- 实例,每生成一个对象开辟一个新的内存,
object = 类名(参数)
特性:
封装
-- 类中数据与方法,对类外透明,类外无法访问其中 内部数据+内部方法
-- 实际上是透明细节,留下更应该关注的点,而不去深化细节
继承
-- 方法+属性 全部继承父类,子类可以 重新修改+新增
多态
-- 一个接口,多种实现。调用父类方法,子类都执行各自工作
语法:
属性:
私有: -- 只在类中能访问,类外不可访问
-- __属性名 --声明一个私有属性
-- 通过def一个方法,通过object.方法进行访问
方法
私有: -- def __函数名() --定义一个私有方法
构造函数
-- 初始化参数,让类中的方法能够调用
def __init__(self,参数)
self.参数 = 参数
析构函数:
-- 实例释放、销毁时候,执行收尾工作
-- 关闭数据库连接和临时文件
def __del__(self):
-- 直到实例释放、销毁时候执行,此执行体
类变量
-- 定义在类下,和def函数同级,不需要实例化就可以直接通过“类名.变量名 ”进行调用
-- 新增对象的类变量改了,对于另外一个新增对象的类变量还是原来类的,
相当于每个对象,都继承原类属性,自己开了新的内存存储自己
-- 大家共用的属性,节省开销 -- 国籍
-- 对于列表 全部共享
实例变量
-- 参数作用域于实例本身
-- 可以通过类外 “object.属性 = 值” -- 新增初始化参数或者修改初始化参数
-- 类变量如果是列表,任何修改都会共享
类变量和实例变量的优先级?
-- 先找实例变量,再往上找类变量,最后找全局变量
面向对象编程有什么好处?
-- 降低重复写代码
-- 降低耦合度,程序要经常修改,不会改一处而动全身
面向对象的框架是什么?
class 类名(object):
def __init__(self,参数): # 可设置默认参数,self本质上是object_n,构造函数
self.参数 = 参数 # 实例变量(静态属性)
def 作用(self.参数): # 调用变量是类中的self.参数,类的方法,功能(动态属性)
sdlf.参数.一顿犀利古怪操作
object_n = 类名(传入参数) # 本质上是 类名(object_n, object_n.参数 = 参数)
-- object_n 类的实例
__init__的本质是什么?
def __init__(self,参数):
self.参数 = 参数
相当于类外
object = 类名() # 实例化一个参数
obiect.参数 = 值 # 可以进行新增或者赋值
在类外删除一个属性
del 参数
什么是python的回收机制?
-- python内部有个循环,只要变量存在,就认为此变量还在用,
不管你认为这个整个程序只用一次,或者多年运行才调用一次,
python不会自作聪明的释放,如果想要释放,就必须手动 del 声明
继承主要作用是什么?
-- 节省代码
-- 继承的本质是把父类的属性和方法全部拷贝到子类中,
子类通过重构增加或修改属性和方法,所有的继承全部是子类的
子类继承父类有什么特性?
class 子类(父类)
-- 全部继承父类的方法和属性,可以覆盖父类方法重新定义,重构
-- 如果不想覆盖,可以子类中通过“父类.方法(self) ”进行父类方法调用
如何子类调用父类析构函数?
def __init__(self,子类参数): # 重构析构
父类.__init__(self,父类参数) # 调用父类析构
self.父类没有的属性 = 父类没有的属性 # 析构自己拥有的属性
-- 子类参数和父类参数相同时候才调用父类析构函数
-- 还有个高级方法调用父类的析构函数
--super(子类名,self).__init__(父类参数)
等价于
--父类.__init__(self,父类参数)
方便在于,父类析构方法改变了,子类不需要进行修改
什么是经典类和新式类?
-- 唯一形式区别 新式类需要继承object,super是新式类的写法,object是基类,所有类都需要继承object
--主要区别在于多继承:
-- 经典类对于多继承搜索方式是从左到右,深度优先,py2
-- 新式类对于多继承搜索方式是从左到右,广度优先,py3
-- 通过 类名.__mro__查看搜索路径,对于相同的属性方法搜索路径,不是都走,而是找的一个就停下来了
-- 新式类中可以把一个实例对象当做参数传入另外一个实例对象中,相当于另外一个实例对象继承了参数对象的类
为什么要多继承?
继承额外的功能
什么是多态?
一种接口,多种实现,实现对接口的重用
一般调用实例的方法是什么?
object_1 = 类名1(参数n)
object_1.方法()
object_2 = 类名2(参数m)
object_2.方法()
思考?
-- 能不能实现通过 类名.方法() 进行实现方法调用?
-- 在类中添加
@staticmethod # 静态方法
def 接口名(obj): # 定义接口
obj.类方法() # 调用方法
-- 可以通过 obj = 类名(参数)
类名. 接口名(obj) # 通过接口调用类方法
-- 本质上是把实例对象当做参数传入进去,所有才能调用类属性和方法
什么是@staticmethod静态方法?
-- 在类中定义一个静态方法,被装饰的类函数,类函数不再是类的方法,
变成一个函数,不能在此函数中调用任何类属性和方法,名义上是属于类,实际跟类没什么关系
-- 可以把实例对象当做参数传入进去,所有才能调用类属性和方法
什么是@classmethod类方法?
-- 被装饰的类函数,函数只能访问类变量,不能访问实例变量,(当类变量和实例变量都存在时候,强制读取类变量)
什么是@property 属性方法?
-- 把一个方法变成一个静态属性,无法进行传参
obj = 类名(参数)
obj.静态属性名 # 后面不需要加 “()”
-- 如果想要传入参数,必须在下面定义同一个同名函数,写入参数,前面加 @静态属性名.setter
- 通过 obj.静态属性名 = 参数
@静态属性名.setter
def 静态属性名(self,参数):
self.__参数 = 参数
obj.静态属性名 = 参数 # 进行传参
--如何删除?
del obj.属性 # 删除obj的属性
@静态属性名.deleter
def 静态属性名(self):
del 静态属性名
静态属性和方法有什么用?
- 连接API
- 解析结果
- 返回用户
--用户不关心上面的实现动作过程,用户只需要调用这个属性,
把过程封装在这个属性中,对用户来说,就是一步操作
类中有哪些特殊方法?
对类和实例对象
-- .__doc__ --查看类的注释
--.__module__ --当前操作的对象在哪个模块
--.__class__ --当前操作的对象类是什么
--.__dict__
--通过类名.__dict__调用,打印类中所有属性,不包括实例属性,通过实例对象调用,打印实例属性
在类中定义,类外调用
-- __str__(self) --给实例对象显示一个属性名,便于区分
def __str__(self):
return “<输出模版>” self.实例属性名
# 返回self.实例属性名,给该实例对象
-- __call__ --在类中定义
def __call__(self,*args,**kwargs):
函数体
类外 “实例对象()”<=>”object()”或者 类名()() 进行调用__call__函数
类的起源于type类
还有哪些接口?
__getitem__(self,参数) --通过 对象[传入参数] 进行传值并且调用__getitem__方法
__setitem__(self,key,value) -- 通过 对象[key] = value 进行传值,并调用此方法
__delitem__(self,参数) -- del 对象[参数] 进行传值,并调用此方法
python_面向对象的更多相关文章
- python_面向对象编程
一.编程范式 程序员通过特定的语法+数据结构+算法告诉计算机如果执行任务,实现这个过程有不同的编程方式,对这些不同的编程方式进行归纳总结得出来的编程方式类别,即为编程范式 编程范式:面向过程编程.面向 ...
- Python_面向对象_类1
面向对象:减少重复代码,提高效率,比函数式编程更高效 类的创建: 实例属性又称:成员变量,成员属性(或者字段) 面向对象的三大特性: 一.封装 把客观事物封装为抽象的类,并对外只暴露一个可用接口 使用 ...
- python_面向对象魔法方法指南
原文: http://www.rafekettler.com/magicmethods.html 原作者: Rafe Kettler 翻译: hit9 原版(英文版) Repo: https://gi ...
- python_面向对象小试题
打印啥? class Animal(object): hobby = "eat" def run(self): print(self.hobby) return self.hobb ...
- python_面向对象进阶(7)
第1章 面向对象特性—继承(补充) 1.1 接口类.抽象类介绍 1.2 接口类 1.3 接口类应用过程 1.3.1 第一版:完成多种支付方式接口 1.3.2 第二版: 归一化设计,统一支付方式 1.3 ...
- python_面向对象(6)
第1章 递归函数 1.1 概述 1.2 练习 1.3 二分查找 第2章 面向对象•类 2.1 类的介绍 2.2 书写格式 2.3 类的属性 2.4 self介绍 2.5 类属性补充 2.6 调用查看静 ...
- Python_面向对象进阶
isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() isi ...
- Python_面向对象基础
概念 类 一类抽象的事物,是描述了一类事物有哪些属性或者行为,但不是具体——模子. 实例 一个依托于类的规范存在的,被赋予了具体属性值的实际存在的物体. 对象 就是实例,实例的另外一个名称,相当于别名 ...
- Python_面向对象_单例模式
class A(object): pass a1 = A() a2 = A() print(a1 == a2)print(id(a1))print(id(a2)) 结果: False 23257231 ...
随机推荐
- css边框内圆角
一.使用两个元素实现 html <div class="parent"> <div class="inset-radius">时代峰峻胜 ...
- Python的Django框架完成一个完整的论坛(源码以及思路)
一个完整的论坛,登录.注册.发表.头像.点赞.评论.分页.阅读排行等 使用Django2,Python3.5 开发工具:Pycharm5 需要的知识:Python基础知识,Django原理的理解以及使 ...
- blog建表操作
表思维导图: 数据库:表 from django.db import modelsfrom django.conf import settingsfrom django.contrib.auth. ...
- SQL Server-聚焦sp_executesql执行动态SQL查询性能真的比exec好?
前言 之前我们已经讨论过动态SQL查询呢?这里为何再来探讨一番呢?因为其中还是存在一定问题,如标题所言,很多面试题也好或者有些博客也好都在说在执行动态SQL查询时sp_executesql的性能比ex ...
- ssh框架遇到的问题总结
1.org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource ...
- Percona Toolkit 2.2.19 is now available
New Features: 1221372: pt-online-schema-change now aborts with an error if the server is a slave, be ...
- DAY5-小别-2018-1-15
有两天没有写了,前天考完试出去浪了,惭愧自己没有学习:昨天,启程回家看完了循环内容的视频,晚上十点半火车到站,没抽出时间写了,还看了<黑客帝国>,有点小感触,人工智能的时代即将到来,我们该 ...
- python数据处理之基本函数
一.基本函数篇 1)python strip()函数介绍 函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除序列的字符 s.lstr ...
- NOI 2004 郁闷的出纳员
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- HDU6237-A Simple Stone Game-找素因子(欧拉函数)-2017中国大学生程序设计竞赛-哈尔滨站-重现赛
A Simple Stone Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Ot ...