当前位置:首页>python>从零开始学python-类与对象_1

从零开始学python-类与对象_1

  • 2026-09-02 20:31:46
从零开始学python-类与对象_1

Hi~新朋友,记得点上面蓝字(网虫root)关注哟~

前言:

   Python是一门面向对象的编程语言,它支持使用类(class)和对象(object)来组织代码。通过类和对象,可以将数据(属性)和操作(方法)封装在一起,使代码更加模块化、易于维护和复用。

1. 面向对象编程简介

面向对象编程(Object-Oriented Programming, OOP) 是一种程序设计范式,它将程序看作一组相互协作的对象,每个对象拥有自己的状态(数据)和行为(方法)。对象是类的实例,类定义了对象的蓝图。

  • 类:是创建对象的模板,它描述了该类对象共有的属性和方法。

  • 对象:是类的具体实例,拥有独立的属性值。

举个例子:你可以把“狗”看作一个类,它定义了所有狗共有的属性(如名字、年龄)和行为(如叫、跑)。而具体的一只名叫“旺财”的2岁小狗,就是“狗”类的一个对象。

🔍进一步理解:

概念
本质
类比
关键点
类(Class)
蓝图/模板(定义对象的结构)
汽车设计图纸
不占用内存,仅描述规则
对象(Object)
具体实例(类的运行时实体)
一辆具体生产的汽车
每个对象独立存在,占用内存

💡关键洞察:

  • 类是抽象概念,对象是具体实现。

  • 类 = 说明书,对象 = 按说明书造出的实物。

2. 类的定义

2.1语法结构

在Python中,使用 class 关键字来定义一个类,后接类名,类名通常采用驼峰命名法(即每个单词首字母大写,例如 MyClass),类体以缩进块表示。

class ClassName:    # 类体:定义属性和方法

🧰关键语法:

  • class:定义类的关键词。

  • 类名:必须是合法的Python标识符(字母、数字、下划线,不能以数字开头)。

  • 类体:必须缩进(通常4个空格),包含属性和方法。

2.2 类的定义示例

class Dog:    """一个简单的Dog类,表示狗的属性和行为"""    # 类体

3.对象的创建:实例化(实例化对象 )

3.1 语法

对象是类的实例,通过调用类名后加括号创建,可以创建一个该类的实例(对象),括号内可传递初始化参数(如果类定义了 __init__ 方法)。

object_name = ClassName(arguments)

🧭关键语法:

  • 类名后加括号 ():表示实例化。

  • 括号内参数:传递给 __init__ 方法的参数。

3.2 对象创建示例

class Dog:    def __init__(self, name, breed):        self.name = name        self.breed = breed创建两个Dog对象:my_dog = Dog("Buddy", "Golden Retriever")  # 实例化对象your_dog = Dog("Max", "Labrador")           # 另一个对象
  • my_dog 和 your_dog 是两个独立的 Dog 对象,每个对象有自己的 name 和 breed 属性。

  • 每次实例化都会得到一个独立的对象,它们在内存中拥有不同的地址。

4. 构造函数 __init__()

通常我们希望对象在创建时就拥有一些初始属性,这可以通过定义 __init__() 方法来实现。__init__() 是一个特殊方法(也称为构造函数),它在对象创建后自动调用,用于初始化对象的属性。

class Dog:    def __init__(self, name, age):        self.name = name   # 实例属性        self.age = age     # 实例属性
  • self 参数指向当前正在被创建的实例,它必须是实例方法的第一个参数。

  • 通过 self.属性名 可以为该实例绑定属性。

💡创建带初始值的对象:

dog1 = Dog("旺财", 2)dog2 = Dog("来福", 3)print(dog1.name)   # 输出:旺财print(dog2.age)    # 输出:3

🎯注意:

  • __init__() 方法的参数除了 self 外,可以定义任意多个,在实例化时必须传入对应的实参。

  • __init__在对象创建时自动调用,且只执行一次!

  • 无论你创建多少个对象,每个对象的__init__都独立执行一次。

5. 对象创建全过程

class Dog:    def __init__(self, name, age):        print("步骤3:调用__init__方法")  # 仅在创建对象时执行        self.name = name  # 实例属性        self.age = age    # 实例属性# 创建对象(触发__init__)buddy = Dog("Buddy", 5)  # 输出: 步骤3:调用__init__方法max = Dog("Max", 3)      # 输出: 步骤3:调用__init__方法

🔍 为什么强调“只执行一次”?

当创建buddy时,__init__执行一次 → 初始化buddy的属性

当创建max时,__init__再次执行 → 初始化max的属性

不是所有对象共享同一个__init__执行!每个对象独立触发。

🌲当执行 buddy = Dog("Buddy", 5) 时,Python会严格按顺序执行以下步骤:

步骤
操作
代码示例
说明
1. 创建空对象
分配内存空间
buddy = Dog("Buddy", 5)
Python先创建一个空对象,但尚未初始化
2. 调用 __new__
创建对象实例
__new__(cls, *args, kwargs)
这是一个静态方法,负责创建并返回一个新的实例。如果类中没有定义 __new__,则会调用父类的 __new__。底层构造函数(通常无需重写)
3. 调用 __init__
初始化对象
__init__(self, name, age)
如果 __new__ 返回了该类的实例,Python 会自动调用 __init__ 来初始化这个新创建的对象,传入 self 以及调用时提供的参数。关键步骤! 仅执行一次
4. 返回对象
将对象赋值给变量
buddy = ...
创建完成,对象可用
5. 释放临时变量
清理中间变量
-
无影响

6. __init__ vs __new__

class Dog:    species = "Canis familiaris"    def __new__(cls, *args, **kwargs):        print("1. __new__ 被调用")        instance = super().__new__(cls)        return instance    def __init__(self, name, age):        print("2. __init__ 被调用")        self.name = name        self.age = age# 创建对象my_dog = Dog("Buddy", 3)输出:1. __new__ 被调用   #步骤1:调用__new__方法  2. __init__ 被调用  #步骤2: 调用__init__方法  # 再次创建对象,__init__ 会再次执行(每个对象独立)another_dog = Dog("Lucy", 5)# 同样会打印两条信息

💡 重要提示:

  • __new__负责创建对象(底层机制,99%场景无需修改)

  • __init__负责初始化对象(你必须写的,用于设置属性)

7.简单的类示例

class Dog:    """一个简单的狗类"""    species = "Canis familiaris"  # 类属性    def __init__(self, name, age):        """构造方法,初始化实例属性"""        self.name = name        self.age = age    def description(self):        """返回描述信息"""        return f"{self.name} is {self.age} years old"    def bark(self, sound):        """狗叫方法"""        return f"{self.name} says {sound}"# 创建两个 Dog 实例my_dog = Dog("Buddy", 3)your_dog = Dog("Lucy", 5)print(my_dog.description())  # 输出: Buddy is 3 years oldprint(your_dog.bark("Woof")) # 输出: Lucy says Woof

【微语】有创造力的人不会沉溺于过去的痛苦,他们会学会教训;而弱者则是整日沉浸在痛苦里,回顾以往的苦难来折磨自己。

网虫root

期待你的

分享

点赞

在看

最新文章

随机文章