python全栈之路—十分钟搞定面向对象-类的结构-类的空间问题,建议收藏
面向对象本节整理知识点
面向过程编程vs函数式编程
面向对象初识函数式编程vs面向对象编程类的结构
从类名的角度研究类类名操作静态属性类名操作动态方法
从对象的角度研究类什么是对象对象操作对象空间属性对象查看类中的属性对象操作类中的方法self 是什么?一个类可以实例化多个对象
Python 类的空间问题何处可以添加对象属性何处可以添加类的静态属性对象如何找到类的属性
类与类之间的关系依赖关系关系关联关系.聚合关系组合关系.
什么是面向对象的继承
继承的分类
单继承类名,对象执行父类方法执行顺序同时执行类以及父类方法
多继承经典类的多继承新式类的多继承mro序列表头和表尾列表之间的+操作
封装
继承
多态
类的约束
super
细分类的组成成员
类的私有成员公有静态属性(字段)私有静态属性(字段)公有普通字段私有对象属性公有方法私有方法
类的其他成员类方法静态方法属性
isinstace 与 issubclass
isinstance(a,b)
issubclass(a,b)
反射对象的反射对类的反射当前模块的反射其他模块的反射反射的应用
双下方法__len____hash____str____repr____call____eq____del____new____item__系列
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
面向过程编程vs函数式编程
我们在没有学习函数的时候,写的代码都是面向过程式编程
# 面向过程编程 测量对象的元素的个数。
s1 = 'fjdsklafsjda'
count = 0
for i in s1:count += 1
l1 = [1,2,3,4]
count = 0
for i in l1:count += 1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
在我们学习函数后就是在面向函数编程
def func(s):count = 0for i in s:count += 1return count
func('fdsafdsa')
func([1,2,3,4])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
通过对比可知:函数编程较之面向过程编程最明显的两个特点:
1,减少重复的代码。
2,增强代码的可读性。
面向对象初识
函数式编程vs面向对象编程
函数式编程
# 函数式编程
# auth 认证相关
def login():pass
def regisgter():pass
# account 账户相关
def func1():pass
def func2():pass
# 购物车相关
def shopping(username,money):pass
def check_paidgoods(username,money):pass
def check_unpaidgoods(username,money):pass
def save(username,money):pass
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
面向对象编程
class LoginHandler:def login(self):passdef regisgter(self):pass
class Account:def func1(self):passdef func2(self):pass
class ShoppingCar:def shopping(username,money):passdef check_paidgoods(username,money):passdef check_unpaidgoods(username,money):passdef save(username,money):pass
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
通过对比可以看出面向对象第一个优点:
面向对象编程:是一类相似功能函数的集合,使你的代码更清晰化,更合理化。
说第二个优点之前,先看看什么是面向对象。
面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来。
问题来了,那什么是类?什么又是对象?
类:就是具有相同属性和功能的一类事物
对象:就是类的具体表现形式
具体一些:先解释解释什么是车? 有轱辘, 有方向盘, 有发动机, 会跑的是车. 好. 在解释一个. 什么是人. 有名字, 年龄, 爱好, 会唱歌跳舞思考的是人.那么广义上车,人就是类:但是具体的我的车,你这个人这是一个对象。
猫,是一类,你们家养的 大橘。
狗,是一类,隔壁家养的那只二哈就是对象。
面向对象思维, 要自己建立对象. 自己建立场景. 你是就是面向对象世界中的上帝. 你想让车干嘛就干嘛. 你想让人干嘛人就能干嘛。
再说第二个优点:面向对象,要拥有上帝的视角看问题,类其实就是一个公共模板(厂房),对象就从具体的模板实例化出来(慢慢体会)。
类的结构
class Human:"""此类主要是构建人类"""mind = '有思想' # 第一部分:静态属性 属性 静态变量 静态字段dic = {}l1 = []def work(self): # 第二部分:方法 函数 动态属性print('人类会工作')
class 是关键字与def用法相同,定义一个类。
Human是此类的类名,类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头。
类的结构从大方向来说就分为两部分:
静态变量。
动态方法。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
从类名的角度研究类
类名操作静态属性
第一种,查看类中的所有内容:类名.__dict__方式。
class Human:"""此类主要是构建人类"""mind = '有思想' # 第一部分:静态属性 属性 静态变量 静态字段dic = {}l1 = []def work(self): # 第二部分:方法 函数 动态属性# print(self)print('人类会工作')
print(Human.__dict__)
print(Human.__dict__['mind'])
Human.__dict__['mind'] = '无脑'
print(Human.__dict__) # 错误
#通过这种方式只能查询,不能增删改.
# 第一种方式只用户查询全部内容(一般不用单独属性查询).
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
第二种:万能的点.
class Human:"""此类主要是构建人类"""mind = '有思想' # 第一部分:静态属性 属性 静态变量 静态字段dic = {}l1 = []def work(self): # 第二部分:方法 函数 动态属性# print(self)print('人类会工作')
print(Human.mind) # 查
Human.mind = '无脑' # 改
print(Human.mind)
del Human.mind # 删
Human.walk = '直立行走'
print(Human.walk)
# 通过万能的点 可以增删改查类中的单个属性
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
对以上两种做一个总结:如果想查询类中的所有内容,通过 第一种__dict__方法,如果只是操作单个属性则用万能的点的方式
类名操作动态方法
前提:除了两个特殊方法:静态方法,类方法之外,一般不会通过类名操作一个类中的方法。
class Human:"""此类主要是构建人类"""mind = '有思想' # 第一部分:静态属性 属性 静态变量 静态字段dic = {}l1 = []def work(self): # 第二部分:方法 函数 动态属性# print(self)print('人类会工作')def tools(self):print('人类会使用工具')
Human.work(111)
Human.tools(111)
下面可以做,但不用。
Human.__dict__['work'](111)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
从对象的角度研究类
什么是对象
对象是从类中出来的,只要是类名加上(),这就是一个实例化过程,这个就会实例化一个对象。
执行下列代码会发生什么事情?
class Human:mind = '有思想'def __init__(self):print(666)print(self) # <__main__.Human object at 0x00000191508AA828>def work(self):print('人类会工作')def tools(self):print('人类会使用工具')
obj = Human() # 只要实例化对象,它会自动执行__init__方法
print(obj) # <__main__.Human object at 0x00000191508AA828>
# 并且obj的地址与self的地址相同
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
其实实例化一个对象总共发生了三件事:
1,在内存中开辟了一个对象空间。
2,自动执行类中的__init__方法,并将这个对象空间(内存地址)传给了__init__方法的第一个位置参数self。
3,在__init__ 方法中通过self给对象空间添加属性。
示例:
class Human:mind = '有思想'language = '使用语言'def __init__(self,name,sex,age,hobby):# self 和 obj 指向的是同一个内存地址同一个空间,下面就是通过self给这个对象空间封装四个属性。self.n = nameself.s = sexself.a = ageself.h = hobby
obj = Human('barry','男',18,'运动')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
对象操作对象空间属性
对象查询对象中所有属性。 对象.dict
class Human:mind = '有思想'language = '实用语言'def __init__(self,name,sex,age,hobby):# self 和 obj 指向的是同一个内存地址同一个空间,下面就是通过self给这个对象空间封装四个属性。self.n = nameself.s = sexself.a = ageself.h = hobby
obj = Human('barry','男',18,'运动')
print(obj.__dict__) # {'n': 'barry', 'h': '运动', 's': '男', 'a': 18}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
对象操作对象中的单个属性。 万能的点 .
class Human:mind = '有思想'language = '实用语言'def __init__(self,name,sex,age,hobby):# self 和 obj 指向的是同一个内存地址同一个空间,下面就是通过self给这个对象空间封装四个属性。self.n = nameself.s = sexself.a = ageself.h = hobby
obj = Human('barry','男',18,'运动')
obj.job = 'IT' # 增
del obj.n # 删
obj.s = '女' # 改
print(obj.s) # 查
print(obj.__dict__)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
对象查看类中的属性
class Human:mind = '有思想'language = '实用语言'def __init__(self,name,sex,age,hobby):self.n = nameself.s = sexself.a = ageself.h = hobby
obj = Human('barry','男',18,'运动')
print(obj.mind)
print(obj.language)
obj.a = 666
print(obj.a)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
对象操作类中的方法
class Human:mind = '有思想'language = '实用语言'def __init__(self,name,sex,age,hobby):self.n = nameself.s = sexself.a = ageself.h = hobbydef work(self):print(self)print('人类会工作')def tools(self):print('人类会使用工具')
obj = Human('barry','男',18,'运动')
obj.work()
obj.tools()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
类中的方法一般都是通过对象执行的(出去类方法,静态方法外),并且对象执行这些方法都会自动将对象空间传给方法中的第一个参数self.
self 是什么?
self其实就是类中方法(函数)的第一个位置参数,只不过解释器会自动将调用这个函数的对象传给self。所以咱们把类中的方法的第一个参数约定俗成设置成self, 代表这个就是对象。
一个类可以实例化多个对象
obj1= Human('小胖','男',20,'美女')
obj2= Human('相爷','男',18,'肥女')
print(obj1,obj2)
print(obj1.__dict__)
print(obj2.__dict__)
- 1
- 2
- 3
- 4
- 5
Python 类的空间问题
何处可以添加对象属性
class A:def __init__(self,name):self.name = namedef func(self,sex):self.sex = sex
http://www.taodudu.cc/news/show-2426138.html
相关文章:
- Java动态修改注解的属性值
- 获取select选中的值php,js如何获取select标签选中的值
- 程序员跟产品经理打起来了,事情的真相是...
- View的测量宽高和最终宽高有什么区别?
- 第五章---面向对象---小练习
- App渠道安装来源识别与匹配
- 因为一件事,公司的前后端打起来了
- Python之面向对象-类与 类之间的关系
- 工商阿里忙互殴 苏宁高调打假争做主角?
- [【震撼】珠海中学曝【师生课堂互殴门】]
- 论如何做好IE和Chrome互殴时的一条好池鱼之事件绑定篇
- 南京中山陵环卫工和游客当众互殴(图)
- 重庆万州公交车坠江原因公布:乘客与司机激烈争执互殴致车辆失控
- 水滴筹、轻松筹干架,从线上到线下:员工医院互殴引围观
- 最牛最新奶粉事件“争抢奶粉互殴”值得我们大家去深思
- 类对象实现红蓝方互殴
- 两人互殴打架派出所如何处理
- 产品和程序员的互殴大战
- 对模型进行DP处理(DP-SGD+DP-Logits)
- C++:动态规划DP;
- MiniDP与HDMI的关系
- android 宽度是多少dp,Android开发中dp、dpi、px的区别
- 数位dp
- Profibus DP新总结
- dp计算
- DisplayPort-DP接口知识
- DP总结
- 探索DP协议
- Type C DP简介
- DP问题总结
python全栈之路—十分钟搞定面向对象-类的结构-类的空间问题,建议收藏相关推荐
- Python全栈之路系列之数字数据类型
上篇文章中我们简单的体验了Python语言基本概念与语法,那么在继续深入下去的过程中,不妨先学习几个常见的Python内置数据类型?这也是大部分Python教科书的学习目录,由浅至深,慢慢深入. Py ...
- JeecgBoot 单体升级微服务快速方案(十分钟搞定)
JeecgBoot 单体升级微服务方案(十分钟搞定) 当前系统分为system.demo 等模块,现有需求把每个模块单独启动作为微服务应用,故而推出新版boot[20200812beta],支持快速切 ...
- 逗号后面统一加空格_十分钟搞定字幕,教你做加字幕的“快手菜”
平台上许多同学有疑问:做视频是否有加字幕的必要呢? 其实除了外语需要翻译.语速过快加字幕方便理解.普通话不标准等情况之外,还是建议有余力的同学可以加上字幕,提升用户的观看体验. 那么问题来了,存在以下 ...
- 全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析
全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析 废话先说一点,算了.直接进入正题吧. 用例子说话: JSON数据: string json: " {" ...
- JAVA微信企业付款到零钱(十分钟搞定),附完整DEMO下载
最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信提现功能开发的流程, 主要就是按规则封装好请求参数调用微信接口,涉及一些签名校验: A.接口流程 获取用户OPENI ...
- java 分组报表_【Java】分组报表怎么做,积木报表十分钟搞定!
首页 专栏 java 文章详情 0 分组报表怎么做,积木报表十分钟搞定! scott发布于 今天 12:24 报表需求 某大型超市需要做一张年度区域销售统计报表 展示2019和2020年度各地区每月的 ...
- java零钱换整程序_JAVA微信企业付款到零钱(十分钟搞定),
JAVA微信企业付款到零钱(十分钟搞定), 最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信企业付款到零钱的开发过程, 主要就是按规则封装好请求参数调用微信接口,涉 ...
- Python全栈之路系列----之-----内置函数和匿名函数lamdba
引子 什么是内置函数? 内置函数就是python 提供给我们直接拿来就可以用的函数 内置函数--内置命名空间 只管调用 不管实现 总共68个 def func(): == #这是自己定义的函数 ...
- 【二十一】Python全栈之路--构造方法_继承_登录注册
文章目录 1. 构造方法__init__ 2. 单继承_多继承 2.1 单继承 2.2 多继承 3. super的深度理解 4. 注册_登录 4.1 注册 4.2 登录 5. 小练习 1. 构造方法_ ...
- Python全栈之路系列之面向对象基础
面向对象基本介绍 Python编程方式: 面向过程编程 面向函数编程 面向对象编程 名称定义: 如果函数没有在类中称之为函数 如果函数在类中称之为方法 创建类 在学习过程中有什么不懂得可以加我的 py ...
最新文章
- linux命令之上传文件和下载文件
- Sublime text3 新建 HTML文件
- [Leetcode][第322题][JAVA][零钱兑换][回溯][记忆化搜索][动态规划]
- php实现ftp上传,PHP_PHP实现ftp上传文件示例,FTP上传是PHP实现的一个常见且 - phpStudy...
- opencv8-图像模糊
- MySQL5.6从库修改主机名同步停止的解决办法
- CodeBlocks问题解决
- PHP目前比较常见的五大运行模式
- 走近汇编理解与内核编程
- win7便签损坏怎么彻底修复好
- 计算机文字录入在线打字,教您如何在一分钟内把书中的文字录入电脑
- curl命令查询IP和运营商
- 现代数字信号处理第九章——盲信号处理
- 北京市居住证办理问题的整理
- 系统配置工具-- Siebel Tools
- 成长的路上总会有那么一群人
- 【NLP】第9章 匹配分词器和数据集
- JavaScript中onload()用法
- 谁生活在地狱,自己心里都有数 ---Leo读 不是孙振耀写的职场感言 3
- 万能命令:wn.run/
热门文章
- 用阿里云商标注册流程步骤,以及有哪些商标延伸服务
- 探索的乐趣(物理笔记)
- 物联网终端安全系列(之一) -- 物联网终端安全风险简析
- js日期格式化函数示例:将日期时间格式化成yyyy-mm-dd hh:ii:ss格式
- Jsonp解决跨域问题原理
- sin级数展开c语言,三角函数sin的泰勒级数展开
- 网吧安内线 黑客遥控偷Q币出售牟利
- 用计算机修改图片或照片,【如何更改图片像素】电脑上如何改照片像素
- linux引导文件制作U盘,Linux下制作U盘系统启动盘的方法
- 如何远程装服务器系统安装系统安装系统,远程在服务器上安装系统安装教程