混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解

  • 前言
  • 一、类、对象、方法、函数和属性的区别和理解
  • 二、一个类的简单案例和对各种概念的理解
  • 三、总结

欢迎学习交流!
邮箱: z…@1…6.com
网站: https://zephyrhours.github.io/

前言

相信很多刚刚初学 python 的朋友几乎都会被类、对象、方法、函数和属性等概念搞得云里雾里,如果没有人点播,其实理解这些概念还是会有些困难的,下面笔者把自己对这几个概念的理解分享给大家,希望对初学者有所帮助!请仔细看完,多看几遍应该可以看懂!

一、类、对象、方法、函数和属性的区别和理解

  • 类: 采用 Class 作为关键字进行定义的代码块,表示的是一种类别
  • 对象: 实例化之后的类,对类中的形参进行了赋值,赋予其真正的含义或数值
  • 方法: 使用 def 作为关键词,定义在类内的函数
  • 函数: 使用 def 作为关键词,但是没有在类内进行定义,即 定义在类外
  • 属性: 类内的称呼,其实就是类内的变量,同一个类内的不同方法内的变量都是这个类的属性,也就是这个类的变量

下面这些是重点,请仔细看,多看几遍,只要你能看懂下面这句话,也就理解了这些混淆概念的区别了!

主要区别【定义和使用的位置】:
函数方法都是函数,定义在类内叫做方法,定义在类外或者单独使用叫做函数
属性变量其实都是变量,定义在类内叫做属性,定义在类外或者单独使用叫做变量

就像数学中的集合,也像一个大的函数,只不过这个函数里面有很多小的函数(这些小函数就是类内的方法),是一个抽象的概念,类只有实例化之后才具有意义,而实例化的类叫做对象,这里就变成了一个具体的实物。

二、一个类的简单案例和对各种概念的理解

为了更好的帮助大家进行理解,下面我们通过创建一个简单的例子来对其进行解释,具体如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-"""PyQt5 tutorialZephyr Hou on 2020-07-21
"""
class Person:num=1   # 类的属性,使用前需要对其进行声明,否则会报错print("您实例化了Person类,初始化的num=",num)def setName(self,name):self.name=name       # 第一个内部是类内部的属性def getName(self):return self.namedef count(self):self.num+=1   # 使用之前已经对其进行了声明

解释:
首先,我们创建了一个 ,而这个类的名字叫做 Person,然后在这个 Person代码块 下,定义了 setNamegetNamecount 三个函数,因为定义的这三个函数在代码块内,所有我们称之为 Person类三个方法(分别是:setName方法、 getName 方法和 count 方法 )

而对于 setName 方法下面的 变量name, count方法下面的变量num ,我们都可以称之为 类 Person 下面的属性,而类在进行使用时,我们需要对其进行实例化,具体实例化的例子如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-"""PyQt5 tutorialZephyr Hou on 2020-07-21
"""# Person类的实例化
p=Person()    # 调用setName和getName方法
p.setName("小猴")
print(p.getName())# 不调用的时候,查看count方法的属num性
print("num="+str(p.num))# 调用count方法时,查看count方法的属num性
p.count()
print("num="+str(p.num))# 再次调用count方法时,查看count方法的属num性
p.count()
print("num="+str(p.num))

通过上面的代码对Person进行类的实例化,在对其进行实例化之后,具体运行效果如下:

通过结果分析可知,当我们对类进行实例化之后,就可以调用类内的各种方法和属性,具体情况如下:

  • 当我们不调用count方法时,可以发现其下面的num属性值和初始化的num值保持一致,num=1保持不变;
  • 当我们首先调用count方法时,然后再查看count方法下的num属性时,其值就发生了改变,此时有num=2;
  • 当我们第二次调用count方法时,我们可以发现其下面的num属性值其实时是将上次调用之后的运算结果num=2作为初始值进行了运算,得到了此次的运算结果。

这说明当类被实例化之后,类内的代码会被执行,但是其内部的方法在没有被调用之前不会被执行,方法中的属性也不会发生改变,而当方法被调用之后,方法内部的属性值也会发生相应的改变,改变之后的属性值会传递到整个类内,当再次进行调用该类的方法时,其属性的初始值是上次运算之后的属性值结果。

三、总结

我们对 进行定义好之后,在使用之前应该注意以下几点

  • 类在使用之前必须进行实例化
  • 实例化一个类之后,如果在方法外写的代码(如:属性值)会被直接运行,方法内部的代码(属性)只有在调用的时候才会被执行
  • 类中写的变量名称,自动会被认为是类的属性,这个属性可以被该类的方法调用
  • 类中的属性(变量)在使用前需要对其进行声明,否则容易出现错误

混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解相关推荐

  1. 【Python】解析Python中类的使用

    目录结构: contents structure [-] 类的基本使用 专有方法 继承 单重继承 多重继承 砖石继承 1.类的基本使用 下面是类使用的一个简单案例, class person:&quo ...

  2. python中数据类型大小_详细解析Python中的变量的数据类型

    变量是只不过保留的内存位置用来存储值.这意味着,当创建一个变量,那么它在内存中保留一些空间. 根据一个变量的数据类型,解释器分配内存,并决定如何可以被存储在所保留的内存中.因此,通过分配不同的数据类型 ...

  3. 详细解析python正则表达式re模块

    本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于正则表达式中re模块的相关问题,下面一起来看一下,希望对大家有帮助. 在Python中需要通过正则表达式对字符串进⾏匹配的时候,可以使 ...

  4. dive into python 3_对象方法Dive into Python读书笔记3

    近期朋友几篇文章介绍了改对象方法的文章. 关联文章的地址 XML,以及网络部份直接跳过了. 单元测试部份很好,但是我前目是小作坊式的发开,更重视效率,所以也略过. 当前有机遇 会返来看这几章的. 1. ...

  5. Python笔记 · 私有方法、私有属性 单下划线、双下划线

    首先,不同于其他编程语言,Python中不存在真正意义上的"私有方法/属性",Python中所胃的"私有方法"要么基于约定,要么基于编译期的改写(Name Ma ...

  6. php tp写构造函数,详细介绍ThinkPHP中类的构造函数_construct()与_initialize()的区别

    这篇文章主要介绍了ThinkPHP中类的构造函数_construct()与_initialize()的区别,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧. 前言 相信 ...

  7. 翻译:RxSwift的历史以及概念详细解析

    说明 RxSwift到底是什么?这是一个很好的定义: RxSwift是一个库,用于通过使用可观察的序列和功能样式运算符来组成基于异步和基于事件的代码,从而允许通过调度程序进行参数化执行. 听起来复杂吗 ...

  8. C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用...

    这几天一直在复习C#基础知识,过程中也发现了自己以前理解不清楚和混淆的概念.现在给大家分享出来我的笔记: 一,.NET平台的重要组成部分都是有哪些 1)FCL (所谓的.NET框架类库) 这些类是微软 ...

  9. python中变量类型在程序中可以改变_详细解析Python当中的数据类型和变量

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...

最新文章

  1. 为什么数据科学不值得?
  2. Lucene 中的Tokenizer, TokenFilter学习
  3. iptables四个表与五个链间的处理关系
  4. win7远程多用户登录此计算机无法,win7如何实现远程桌面多用户登录|win7实现多用户登录远程桌面的方法...
  5. 买iphone不买android,为何宁可用4年前的苹果6s,也不买两三千的安卓呢?理由很真实...
  6. 分布式系统如何设计,看看Elasticsearch是怎么做的
  7. 沈是计算机专业考研分数线,计算机#2017年东北大学计算机考研究生分数线_计算机考研究生复试分数线...
  8. error C2664: “StrCmpW”: 不能将参数 2 从“const char [12]”转换为“PCWSTR”
  9. 使用python实现一个文件搜索功能,类似于Everything功能
  10. RT-Thread Studio中使用DHT11软件包
  11. 微软MSDN Web cast系列视频教程集锦
  12. Python学习笔记(5)
  13. 微信多订单合并付款_微信小商店订单合并打单,操作分享请收藏!
  14. Android APP memory用量如何回收
  15. android 谷歌地图围栏,如何在谷歌地图与c做地理围栏#
  16. 7_5.移动IP网络
  17. 主机坏了,150能解决的问题我花了近8000
  18. QQ无法登录的一劳永逸解决方案(浏览器可以上网但QQ死都登不上去)
  19. npx mrm@2 lint-staged执行报错
  20. 城市消防项目采用宇视平台接入国标GB28181协议国标视频平台EasyGBS设备过多时应如何解决?

热门文章

  1. 有限状态机:独热码vs格雷码
  2. vue-cli3.0实现播放rtmp直播流
  3. Centos 7 搭建slurm
  4. tessent_shell diagnose flow items
  5. Linux ubuntu系统在线安装、启动、卸载MongoDB 5.0
  6. Java版知识付费源码 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台
  7. 百分点科技连续7年获评“中国大数据企业50强”
  8. 【AD-Studio - 无法识别Module - 个人成功解决的方式】
  9. Easy Binding(DataContext,TwoWay)
  10. STM32 Ymodem 协议及代码解析