【面向新手】Python 类与对象超详细入门,零基础吃透面向对象


Python 是一门面向对象编程语言,在 Python 里一切皆对象,字符串、列表、数字、函数本质都是对象。
而类就是创建对象的模板,对象就是根据类造出来的实例。
很多初学者分不清类、对象、属性、方法,本篇文章的目的就是用通俗易懂的话讲明白类是什么,以此对类入门。
希望对读者朋友有帮助。


类是指相同事务的集合,相当于图纸、模板,定义有什么特征、能做什么行为。
而类创建的结果就是对象。
下面是创建类的使用形式,即模板。

class 类的名称():
    '''类的说明文档'''
    def __init__(self, 参数1, 参数2, ...):
        # 初始化方法代码块
    def 方法名1(self, 参数3, 参数4, ...):
        # 方法1的代码块
    def 方法名2(self, 参数5, 参数6, ...):
        # 方法2的代码块

在正式说明案例之前我们需要知道类在函数里面有什么作用。
比如在一个项目中有多个函数,而每一个函数都需要调用一些相同或不同的数据,在每个函数里无论是设定全局变量还是设定局部变量会让整个py文件变得过于庞大。
因此为了避免这种情况,我们就使用类创建一个数据的共享空间,让每一个函数都能使用共同的数据。

下面将通过代码加深理解,代码如下:

class Phone():
    def __init__(self, brand, color, price):
        self.brand = brand   # 品牌
        self.color = color   # 颜色
        self.price = price   # 价格
    def call(self):
        print(f"我手里的{self.color}{self.brand},可以打电话")
    def video(self):
        print(f"用{self.brand}手机刷短视频,售价:{self.price}元")
phone1 = Phone("华为", "黑色", 3999)
phone2 = Phone("苹果", "白色", 5999)
print(phone1.brand, phone1.color)
print(phone2.price)
phone1.call()
phone2.video()

我们首先创建一个类先从命名开始,通常的习惯是首个字母大写,避免与函数部分弄混淆。
同时后面会有括号。

def __init__(self, brand, color, price):
        self.brand = brand   # 品牌
        self.color = color   # 颜色
        self.price = price   # 价格

这一行是一个类的初始化方法,使用保留字def ,和函数的创建方法基本相同,但是类的初始化方法是使用固定的方法名__init__,前后共有四个下划线,且括号里面第一和形参变量名为self。
self后的形参就是我们需要进行初始化的数据。
我们可以这样理解,我们开辟了一篇self共享数据空间,其中的brand、color和price都是被放入的共享数据,下面的函数都可以自由取用。
在这里插入图片描述

    def call(self):
        print(f"我手里的{self.color}{self.brand},可以打电话")
    def video(self):
        print(f"用{self.brand}手机刷短视频,售价:{self.price}元")

开始定义函数,在手机类里面自定义一个名叫 call 的方法,代表手机打电话的行为,类里面所有自定义方法都必须把 self 写在第一个参数位置,只有带上 self,这个方法后续才能访问到手机对象身上保存的品牌、颜色这些属性。
print 执行打印输出,搭配 f 格式化字符串,大括号里的 self.color 和 self.brand 依靠 self 读取当前手机对象已经保存好的颜色和品牌属性,把手机信息和文字拼接在一起,最终打印出一句描述手机打电话功能的话。
最后一行通过 self.brand 调取当前手机的品牌、self.price 调取手机的价格,把这两个属性值嵌入到字符串中,拼接出描述手机刷视频并标注价格的文字然后输出。

phone1 = Phone("华为", "黑色", 3999)
phone2 = Phone("苹果", "白色", 5999)

根据前面定义的 Phone 手机类模板,实例化创建第一个真实的手机对象,把华为、黑色、3999 这三个实际数据传入,自动传给类里的 init 构造方法完成属性初始化,最后把创建好的手机对象赋值给变量 phone1,方便后续操作这个手机。
phone2 和 phone1 是两个互不干扰、各自有自己特征的手机实例。

print(phone1.brand, phone1.color)
print(phone2.price)

通过 “对象名.属性名” 的写法,主动读取 phone1 这个手机对象身上保存的 brand 品牌和 color 颜色属性,再用 print 把这两个属性值直接打印展示出来。
单独读取 phone2 手机对象的 price 价格属性,利用对象点属性的方式取出提前保存好的价格数据,然后打印输出这部手机的售价。

phone1.call()

通过 phone1 对象调用类中定义好的 call 打电话方法,调用时不用给 self 传参,Python 会自动把 phone1 传给方法里的 self,然后执行方法内部的打印代码,实现这部手机的打电话行为输出。

phone2.video()

用 phone2 对象调用类里的 video 刷视频方法,解释器自动将 phone2 绑定给方法中的 self,运行方法内部的打印语句,输出这部苹果手机刷视频并显示价格的内容。
最终输出结果为:

华为 黑色
5999
我手里的黑色华为,可以打电话
用苹果手机刷短视频,售价:5999

对 Python 类的学习,我们知道 Python 是面向对象编程语言,语言中一切皆对象。类是同类事物的抽象集合,如同模板和图纸,用来规定事物具备哪些特征、拥有哪些行为,而对象就是根据类模板创建出来的具体实例。
我们掌握了类的标准书写格式,明白了 class 定义类、类名首字母大写的编码规范;理解了 init 初始化方法的作用,它在创建对象时自动执行,用来给对象初始化属性。也弄懂了 self 的本质,它代表对象自身,相当于一个数据共享空间,让类中所有方法都能读取和使用对象的自身属性。
同时学会了在类中自定义行为方法,方法首参数必须为 self,配合格式化字符串可以拼接并输出对象信息;掌握了实例化对象、通过对象。属性访问特征、通过对象。方法 () 调用行为的完整用法。
最后通过手机生活实例,彻底分清了类、对象、属性、方法的概念,也理解了使用类可以统一管理共享数据,避免项目中变量冗余、代码臃肿,为后续学习面向对象继承、多态打下了扎实基础。

更多推荐