python面向对象初识

面向对象编程

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 VSCode新建项目报错The template root requires exactly one element.

1.首先我们点击左侧第四个图标插件2.输入框搜索vetur插件3.点击设置图标&#xff0c;再点击扩展设置4.搜素vetur>validation>template&#xff0c;取消vetur>validation>template的勾选 然后就不会报错了

计算机视觉概述

关于计算机视觉的介绍性文章&#xff0c;包括计算机视觉的定义&#xff0c;和人类视觉的区别以及涉及到的学科等等。 1. 什么是计算机视觉 计算机视觉既是工程领域&#xff0c;也是科学领域中的一个富有挑战性重要研究领域。计算机视觉是一门综合性的学科&#xff0c;它已经吸引…

Java生鲜电商平台-电商支付流程架构实战

Java生鲜电商平台-电商支付流程架构实战 说明&#xff1a;我一直秉承的就是接地气的业务架构实战。我的文章都有一个这样的核心。 1. 业务场景 2. 解决问题。 3.代码实现。 4.代码重构。 5.总结与复盘。 6.缺点与防范 一、场景描述 想必大家都曾遇到过这个问题&#xff0c;在电…

vue3.0 AntDesignVue2.0 table的rowkey报错问题解决方法

Warning: [antdv: Each record in table should have a unique key prop,or set rowKey to an unique primary key.] Warning: [antdv: Table] Each record in dataSource of table should have a unique key prop, or set rowKey of Table to an unique primary key 提示因为…

模式识别扫盲

模式识别是对表征事物或现象的各种形式的信息进行处理和分析&#xff0c;以对事物或现象进行描述、辨认、分类和解释的过程&#xff0c;是信息科学和人工智能的重要组成部分。英文“Pattern”源于法文“Patron”&#xff0c;本来是指可作为大家典范的理想的人&#xff0c;或用以…

vue2项目使用codemirror插件实现代码编辑器功能

1、使用npm安装依赖 npm install --save codemirror 2、在页面中放入如下代码 <template><textarea ref"mycode" class"codesql" v-model"code" style"height:200px;width:600px;"></textarea> </template>…

CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境

安装篇&#xff1a; 一、安装Apache yum install httpd #根据提示&#xff0c;输入Y安装即可成功安装 /etc/init.d/httpd start#启动Apache 备注&#xff1a;Apache启动之后会提示错误&#xff1a; 正在启动 httpd:httpd: Could not reliably determine the servers fully qual…

前端有用的库

HTML awesome-html5 精选的HTML5资源精选清单 CSS tailwindcss 与Tailwind CSS相关的很棒的事情awesome-css-frameworks 很棒的CSS框架列表awesome-css-cn CSS 资源大全中文版&#xff0c;内容包括&#xff1a;CSS预处理器、框架、CSS结构、代码风格指南、命名习惯等等awesom…

计算机视觉牛人(转载)(最早在自动化所论坛上发现的)

paper毕竟是死的, 写paper的人才是活的. 那么我现在研究一下cv圈的格局, 按师承关系, 借鉴前人, 我总结a tree stucture of cv guys.David Marr----->Shimon Ullman (Weizmann) ----->Eric Grimson (MIT)----->Daniel Huttenlocher (Cornell)----->Pedro Felzenszw…

Java生鲜电商平台-促销系统的架构设计与源码解析

Java生鲜电商平台-促销系统的架构设计与源码解析 说明&#xff1a;本文重点讲解现在流行的促销方案以及源码解析,让大家对促销&#xff0c;纳新有一个深入的了解与学习过程. 促销系统是电商系统另外一个比较大&#xff0c;也是比较复杂的系统&#xff0c;作为一个卖货的&#x…

vue3中websocket用法

1.0 认识 websocket #1.0.1 什么是 websocket 和 http 协议类似&#xff0c;websocket 也是是一个网络通信协议&#xff0c;是用来满足前后端数据通信的。 #1.0.2 websocket 相比于 HTTP 的优势 HTTP 协议&#xff1a;客户端与服务器建立通信连接之后&#xff0c;服务器端只…

介绍几个医学图像处理会议

Information Processing in Medical Imaging &#xff0c; IPMI &#xff0c;医学图像处理最顶级的会议&#xff0c;两年召开一次&#xff0c;全球大概入选 50 篇左右&#xff0c;一个非常小圈子的会&#xff0c;据说通常是关在一个偏僻的地方开一周&#xff0c;会议口头报告提…

python翻译

translator.py # -*- coding: utf-8 -*- # author: inspurer(月小水长) # pc_type lenovo # create_time: 2019/4/6 15:44 # file_name: translator.py # github https://github.com/inspurer # qq邮箱 2391527690qq.co…

promise并发

一、Pomise.all的使用 Promise.all可以将多个Promise实例包装成一个新的Promise实例。同时&#xff0c;成功和失败的返回值是不同的&#xff0c;成功的时候返回的是一个结果数组&#xff0c;而失败的时候则返回最先被reject失败状态的值。 let p1 new Promise((resolve, rej…

计算机视觉方面的三大国际会议是ICCV, CVPR和ECCV

ICCV的全称是International Comference on Computer Vision&#xff0c;正如很多和他一样的名字的会议一行&#xff0c;这样最朴实的名字的会议&#xff0c;通常也是这方面最nb的会议。ICCV两年一次&#xff0c;与ECCV正好错开&#xff0c;是公认的三个会议中级别最高的。它的举…

Scanner类+Random

引用数据类型的使用 数据类型 变量名 new 数据类型(); 变量名.方法名(); import java.util.Scanner; publicclass ScannerDemo01 { publicstaticvoid main(String[] args) { //创建Scanner引用类型的变量 Scanner sc new Scanner(System.in); //获取数字 System.out.print…

手写vue2的Lazyload

调用方式&#xff0c;express写个后台服务调图片&#xff0c;具体使用不贴了 import VueLazyload from "./modules/vue-lazyload";Vue.use(VueLazyload,{loading: http://localhost:3000/images/loading.gif,error: http://localhost:3000/images/error.jpg,preload…

nature,science上关于计算机视觉的一些原创文献

真正原始创新是怎么样的&#xff1f;希望这些列表对做视觉研究的朋友有些启发&#xff0c;希望大家能帮我补充一些&#xff0c;谢谢。转载请注明http://hi.baidu.com/daren007或者http://www.sciencenet.cn/blog/王中任.htm。1、D. Marr; T. Poggio.Cooperative Computation of…

webpack入门进阶调优第一章

1.1何为Webpack webpack是开源的JS模块打包工具 核心功能是解决模块之间的依赖&#xff0c;吧哥哥模块按照特定的规则和顺序组织在一起&#xff0c;最终合并为一个JS文件。这个过程叫模块打包 1.2为何需要Webpack 1.2.1何为模块 在设计程序结构时&#xff0c;更好的组织方…

python类的空间问题及类之间的关系

类的空间问题及类之间的关系 类的空间问题 1.何处可以添加对象属性 class A:def __init__(self,name):self.name namedef func(self,sex):self.sex sexobj A("alex") obj.age 18 # 通过__init__方法添加 print(obj.__dict__) obj1 A("wusir") obj.fun…