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

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

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

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

前言

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

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

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

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

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

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

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

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

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
 PyQt5 tutorial
 Zephyr 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.name
    def count(self):
        self.num+=1   # 使用之前已经对其进行了声明

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

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

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
 PyQt5 tutorial
 Zephyr 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进行类的实例化,在对其进行实例化之后,具体运行效果如下:
混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解_第1张图片
通过结果分析可知,当我们对类进行实例化之后,就可以调用类内的各种方法和属性,具体情况如下:

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

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

三、总结

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

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

你可能感兴趣的:(Python,python,编程语言,类)