面向对象编程

1.面向对象初步了解

​ 面向过程编程与函数编程对比:

s1 = 'ajdsgkaffddha'
count = 0
for i in s1:count += 1
print(f'字符串的长度为{count}')  # 面向过程编程每计算一次便使用一次for循环def my_len(s):   # 计算数据类型长度的函数,可重复使用count = 0for i in s:count += 1return count
print(my_len(s1))  

通过对比可知:函数编程较之面向过程编程最明显的两个特点:

1,减少代码的重用性。

2,增强代码的可读性。

同样,函数编程与面向对象变成的对比:

# 函数编程
auth # 认证相关
def register():pass
def login():pass# 账户相关
def func1():pass
def func2():pass# 购物车相关
def shopping_car():pass
def check_paid_goods():pass
def check_unpaid_goods():pass
def save():pass# 面向对象编程
class Auth:def register():passdef login():passclass Account:def func1():passdef func2():passclass Shopping:def shopping_car():passdef check_paid_goods():passdef check_unpaid_goods():passdef save():pass    

通过对比可以看出面向对象第一个优点:

面向对象编程:是一类相似功能函数的集合,使你的代码更清晰化,更合理化。

说第二个优点之前,先看看什么是面向对象。

面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来。

那什么是类?什么是对象?

类:就是具有相同属性和功能的一类事物。

对象:就是类的具体表现。

简而言之:类就像制造一类事物的模板,而对象则是制造出来的一个个具体化的实例

2.面向的对象的结构

class Human:mind = "有思想"language = "使用语言"l1 = []  # 静态变量def work(self):print("人类会工作")def eat(self):print("人类都需要吃饭")  # 动态方法# class 关键字,定义一个类
# Human 类名,类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头。
# 类的结构从大方向来说就分为两部分:
# 静态变量。
# 动态方法。

3.从类名的角度研究类

- 类名操作类的属性

第一种,查看类中的所有内容:类名.__dict__方式。

class Human:mind = "有思想"language = "使用语言"l1 = []  # 静态变量def work(self):print("人类会工作")def eat(self):print("人类都需要吃饭")  # 动态方法
print(Human.__dict__)  # 查看类中所有的内容
print(Human.__dict__["mind"])  # 查看类中mind属性的内容
Human.__dict__['mind'] = '无脑'
print(Human.__dict__)  # 这种做法是错误的,__dict__无法修改类中的内容

第二种:万能的点.

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)
# 通过万能的. 可以增删查改类中的单个属性

**总结:如果想查询类中的所有内容,通过 第一种__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)
# 结果:
111
人类会工作
人类会使用工具
111
人类会工作

4.从对象的角度研究类

- 什么是对象

对象是从类中出来的,只要是类名加上(),这就是一个实例化过程,这个就会实例化一个对象。

class Human:mind = "有思想"def __init__(self):print(666)print(self) # <__main__.Human object at 0x00000196E0DA8CF8>def work(self):print("人类会使用工具")
obj = Human() # 只要实例化对象,它会在自动执行__init__方法
print(obj)  # <__main__.Human object at 0x00000196E0DA8CF8>
# 结果:# obj地址与self的地址相同
666
<__main__.Human object at 0x00000196E0DA8CF8>
<__main__.Human object at 0x00000196E0DA8CF8>

- 实例化对象发生了三件事

其实实例化一个对象总共发生了三件事:

  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 = hobbyobj = Human("barry","男",18,"运动")

- 对象操作对象属性

class Human:mind = "有思想"language = "使用语言"def __init__(self,name,sex,age,hobby):# self和obj两个变量指向同一个内存地址,下面就是通过self给这个对象空间封装四个属性。self.n = nameself.s = sexself.a = ageself.h = hobbyobj = Human("barry","男",18,"运动")
obj.job = 'IT'  # 增
del obj.n  # 删
obj.s = '女' # 改
print(obj.s)  # 查
print(obj.__dict__)
# 结果:
女
{'s': '女', 'a': 18, 'h': '运动', 'job': 'IT'}

- 对象查看类中的属性

class Human:mind = "有思想"language = "使用语言"def __init__(self,name,sex,age,hobby):self.n = nameself.s = sexself.a = ageself.h = hobbyobj = Human("barry","男",18,"运动")
print(obj.mind)
print(obj.language)
obj.a = 666
print(obj.a)
# 结果:
有思想
使用语言
666

- 对象调用类中的方法

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()
# 结果:
<__main__.Human object at 0x000001D2414DF7F0> # 实例化对象内存地址
人类会工作
人类会使用工具

类中的方法一般都是通过对象执行的(出去类方法,静态方法外),并且对象执行这些方法都会自动将对象空间传给方法中的第一个参数self.

5.self是什么?

self其实就是类中方法(函数)的第一个位置参数,只不过解释器会自动将调用这个函数的对象传给self。所以咱们把类中的方法的第一个参数约定俗成设置成self, 代表这个就是对象。

6.一个类可以实例化多个对象

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("人类会使用工具")
obj1= Human('小胖','男',20,'美女')
obj2= Human('相爷','男',18,'肥女')
print(obj1,obj2)
print(obj1.__dict__)
print(obj2.__dict__)
# 结果:
<__main__.Human object at 0x000001C96A1FF860> <__main__.Human object at 0x000001C96A1FF898>
{'n': '小胖', 's': '男', 'a': 20, 'h': '美女'}
{'n': '相爷', 's': '男', 'a': 18, 'h': '肥女'}

转载于:https://www.cnblogs.com/lifangzheng/p/11290599.html

python面向对象初识相关推荐

  1. Python面向对象—初识面向对象

    文章目录 一.什么是面向对象的程序设计 二.初识面向对象 1 类的相关知识 1.1 类的声明 1.2 类的两种作用 1.2.1 属性引用(类名.属性) 1.2.2 实例化 2 对象的相关知识 3 类与 ...

  2. python递归 及 面向对象初识及编程思想

    递归 及 面向对象初识及编程思想 一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递归策 ...

  3. python中的递归思想_〖Python〗-- 递归、面向对象初识及编程思想

    [递归.面向对象初识及编程思想] 一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递归策 ...

  4. Python 基础第十六---十九天(面向对象初识)

    面向对象初识 类的概念:具有相同属性和技能的一类事物 对象的概念:对一个类的具体描述 使用面向对象的好处: 1.使得代码之间的角色关系更加明确 2.增强了代码的可扩展性 3.规范了对象的属性和性能 面 ...

  5. Python高级编程1-python面向对象初识

    面向对象初识 文章目录 一.面向对象 (一)什么是面向对象? (二)什么是类? (三)使用面向对象写代码的好处 (四)面向对象的三大特征 1. 封装 小案例:使用面向对象思想实现游戏中攻击.血量等功能 ...

  6. day06_雷神_面向对象初识

    day_06 递归函数 自己用自己.一般递归100多次,都没有解决的问题,放弃递归. count = 0 def func1():global countcount += 1print(count)f ...

  7. Python - - 面向对象 - - 初始面向对象

    目录 面向过程vs面向对象 初识面向对象 类的相关知识 对象的相关知识 对象之间的交互 类命名空间与对象.实例的命名空间 类的组合用法 初识面向对象小结 面向对象的三大特性 继承 多态 封装 面向对象 ...

  8. python面向对象的优点_Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  9. 这可能是Python面向对象编程的最佳实践

    作者 | 崔庆才 来源 | 进击的Coder(ID:FightingCoder) Python 是支持面向对象的,很多情况下使用面向对象编程会使得代码更加容易扩展,并且可维护性更高,但是如果你写的多了 ...

最新文章

  1. java基本数据类型_Java基础——数据类型
  2. SAP RETAIL MM42里可以顺便维护一下Source List
  3. JavaScript History对象
  4. uva455periodic strings周期串
  5. QT的QDesignerPropertyEditorInterface类的使用
  6. Spring MVC,Ajax和JSON第3部分–客户端代码
  7. vscode python环境配置_用VScode配置Python开发环境
  8. python字典在编程中的作用_python中的字典操作及字典函数
  9. jmeter 配置 slave 代理压测机
  10. 使用Pycharm将代码同步到GitHub
  11. centos ssh配置使用
  12. 集合框架和泛型练习题(含代码)
  13. C/C++ 取整函数ceil(),floor(),向上取整,向下取整
  14. 137_原始套接字_发送UDP数据,模仿他人飞秋给另一个飞秋客户端发送信息
  15. QTP10.0下载及安装说明
  16. 《白说》---- 读书笔记
  17. Vue3 学习笔记 —— transition、transition-group
  18. [杀毒]删除U盘autorun.inf
  19. 第一次作业补充:项目调研
  20. Angr 操作栈的符号执行 04_angr_symbolic_stack

热门文章

  1. Pytorch(二) --梯度下降法
  2. Statues(三维bfs)
  3. 【阿里妈妈营销科学系列】第五篇:多渠道组合路径效率评价
  4. python模式选择符,Python设计模式之修饰器模式
  5. mysql递归查询之后的排序问题_MySQL递归排序查询+树节点生成
  6. adobe audition cs6 能打开mpcm文件吗?_PR竟然有手机版的了?Adobe正式推出Premiere Rush版(内含安装包)!...
  7. oracle 统计分析 dic,数据库优化之统计分析实战篇
  8. 数据结构--栈(附上STL栈)
  9. [机器学习]超参数优化算法-SuccessiveHalving与Hyperband
  10. 【ubuntu】GPU进程kill后,显存未释放(杀死僵尸进程)