Python进阶语法-类和对象

        此博客仅用于分享本人在求职路上的学习内容部以及过程(第一天)。

什么是面向对象

        众所周知,我们常见的计算机编程思想有两类,一类是面向过程,一类则是面向对象。

        面向过程(Procedural Programming)是一种以过程(函数)为核心的编程范式,它将程序分解为一系列步骤或函数,通过依次调用这些函数来解决问题。重点在于“怎么做”。

        面向对象(Object-Oriented,简称OO)是一种编程范式,它以“对象”为核心,将数据和操作数据的方法封装在一起,通过对象之间的交互进行执行。

        在面向对象中,还涉及到属性和行为两个概念:

        属性:名词,用来描述事物的外在特征,例如:性别、姓名、年龄、身高、体重等,类比为面向过程中的变量。

        行为:动词,原来描述事物能够做什么?例如:吃饭、睡觉等,类比为面向过程中的函数。

类和对象的概念

        在掌握面向对象的基本语法之前,需要先了解类和对象这两个基本概念。

        类是对现实事物的抽象描述。是一系列属性和方法的集合,抽象的概念,是看不见摸不着的,相当于一个模板,可以基于这个类创建N个对象。其语法格式如下:

# 定义类
# 格式一
class 类名:
    # 定义方法
    方法列表...
# 格式二
class 类名():
    # 定义方法
    方法列表...
# 格式三
class 类名(object):
    # 定义方法
    方法列表...

        在格式二和三中,若括号中写上了其他类名,则意味着继承自该类。

对象

        对象是对现实事物的具体体现。基本语法格式如下:

# python实例化对象
对象名 = 类名()
# 调用方法
对象名.方法名()

self关键字

        Self是python内置的关键字,用于指向对象实例本身。一个类可以实例化多个对象,可以用于区分是哪个对象调用了类的方法。

# 1.定义类
class Car:
    # 2.定义方法
    def run(self):
        # 3.打印self的值
        print(f"self的值:{self}")
        print("能跑起来了...")
# 4.创建对象1
car = Car() 
# 5.输出对象结果
print(f"输出car对象名:{car}") 
car.run()
# 6. 创建对象2
my_car = Car() 
# 7.输出对象2的结果
print(f输出car对象名:{my_car}") 
my_car.run()

        在上面的代码中,我们通过在类内部输出self的值和在类外部输出对象值不难发现,二者的结果是相等的,且输出是值均为该对象在计算机内的存储地址。如下图所示

添加获取对象属性

什么是属性

        属性表示的是固有特征,在python中使用变量表示。例如:在人类中,姓名、身高、年龄等均是属性。

设置/添加属性

        在不同的场景下,属性的设置和添加方式有所不同。例如,在类外,属性的设置方式是:对象名.属性 = 属性值,而在类内,则可以通过类内部的魔法方法__init__()设置初始值。

获取属性

        同设置/添加属性一样,在不同场景下获取属性的方法也有所不同。在类内,属性的获取方式是:self.属性名,在类外,则是对象名.属性名获取属性的值。

魔法方法

        概念:在python中,有一类方法是用来对python类的功能进行加强(扩展)操作的,并且这一类的方法不需要手动触发(自动触发)。在某些特定场景中也会被动触发,因此被称为魔法方法。

__init__()方法

        在类中,init方法主要是用于初始化属性的值,在创建对象是时候,会被自动调用。

        init方法又分为有参数和无参数两种情况,在无参数的情况下,可以直接通过对象名 = 类名()创建对象。

        特点:

                1、初始化时不接受额外参数,所有属性值在方法内硬编码或通过固定逻辑生成。

                2、实例化时必须无参数:obj = MyClass()

        优点:

                1、简单性:适合属性值固定的场景,无需处理参数传递。

                2、安全性:避免用户传入无效参数导致的问题。

        缺点:

                1、灵活性差:无法通过初始化动态配置对象属性。

                2、使用场景有限:仅适合属性不需要外部干预的情况。

        其创建语法如下。

class 类名:
    def __init__(self):
        self.变量1 = 
        self.变量2 = 
        ...
        self.变量N = 
对象名 = 类名()

        在有参数的情况下,在创建对象名的时候,需要将对应的参数值传入。即对象名=类名(变量1, 变量2, ..., 变量N)。

        特点:

                1、接受额外参数(可选或必选),允许外部动态初始化属性。

                2、实例化时可传参。

        优点:

                1、灵活性高:允许通过参数定制化对象属性。

                2、 可扩展性:支持默认参数(如 name="default"),平衡灵活性和简洁性。

        缺点:

                1、复杂度高:需要处理参数校验、默认值逻辑等。

                2、错误发现:用户可能传入无效参数,需添加验证逻辑(如类型检查)。

        其具体语法如下:

class 类名:
    def __init__(self, 变量1, 变量2, ..., 变量N):
        self.变量1 = 变量1
        self.变量2 = 变量2
        ...
        self.变量N = 变量N
对象名 = 类名(变量1, 变量2, ..., 变量N)

__str__()方法

        str方法主要用于快速打印对象的各个属性值的,在输出语句打印对象时会被自动的触发。如下将通过一个具体的实例来说明str方法的作用。

class Car:
    def __init__(self, color, number):
        self.color = color
        self.number = number
if __name__ == '__main__':
    car = Car("黑色", 6)
    print(car)
class Car:
    def __init__(self, color, number):
        self.color = color
        self.number = number
    def __str__(self):
        return f"车身颜色:{self.color},车胎数量:{self.number}"
if __name__ == '__main__':
    car = Car("黑色", 6)
    print(car)

        在第一段代码中,未使用str方法直接通过print输出对象之后,得到的值为该对象在计算机内的存储地址,而第二段代码在类内使用到了str方法并且返回了f"车身颜色:{self.color},车胎数量:{self.number}"的值,通过print输出之后得到的结果则是:车身颜色:黑色,车胎数量:6。由此可知,在输出语句打印对象时被自动的触发,使得car对象被赋值为f"车身颜色:{self.color},车胎数量:{self.number}"这个字符串了。

__del__()方法

        del方法的作用是:当对象被删除或者文件执行结束完毕后,会自动的调用。因为del会在对象被删除或文件执行结束后自动执行,属于看不见也摸不着,我们无法直接通过结果看出是否调用了del函数。然后我们可以在del函数内输出一段提示词用于查看del的运行过程。

class Car:
    def __init__(self, color, number):
        self.color = color
        self.number = number
    def __str__(self):
        return f"车身颜色:{self.color},车胎数量:{self.number}"
    def __del__(self):
        print("del函数执行了,将对象删除了")
if __name__ == '__main__':
    car = Car("黑色", 6)
    print(car)

        在执行上述代码后,得到如下图所示的结果,可以看出在跑完所有代码,程序即将结束之前自动调用了del函数,将创建的car对象删除了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值