python基础class关键字详解

B站影视 韩国电影 2025-11-14 13:01 1

摘要:class 是 Python 中用于定义类(Class)的关键字,是面向对象编程(OOP, Object-Oriented Programming)的核心基础。通过 class,你可以创建自定义的数据类型,将数据(属性)和操作数据的行为(方法)封装在一起,从而

class 是 Python 中用于定义类(Class) 的关键字,是面向对象编程(OOP, Object-Oriented Programming)的核心基础。通过 class,你可以创建自定义的数据类型,将数据(属性)操作数据的行为(方法) 封装在一起,从而构建结构清晰、可复用、易维护的程序。#python#

下面从 基本语法、核心概念、工作机制、使用示例和最佳实践 五个维度为你全面详解。

class 类名: """可选的类文档字符串(docstring)""" # 类属性(所有实例共享) class_attribute = value # 构造方法(初始化实例) def __init__(self, 参数1, 参数2, ...): self.instance_attribute1 = 参数1 # 实例属性 self.instance_attribute2 = 参数2 # 实例方法 def method_name(self, 其他参数): # 方法体 return ...

命名规范:类名使用 大驼峰命名法(PascalCase),如 Student, BankAccount。

1.类(Class) vs 实例(Instance)

:是“蓝图”或“模板”,描述一类对象的共同特征。实例:是根据类创建的具体对象。class Dog: species = "Canis familiaris" # 类属性(所有狗共享) def __init__(self, name, age): self.name = name # 实例属性(每只狗不同) self.age = age# 创建实例(对象)buddy = Dog("Buddy", 3)milo = Dog("Milo", 5)print(buddy.name) # "Buddy"print(milo.name) # "Milo"print(Dog.species) # "Canis familiaris"(通过类访问)

2.__init__:初始化方法

不是构造函数!而是对象创建后自动调用的初始化方法。第一个参数必须是 self(代表当前实例)。用于设置实例的初始状态(如属性赋值)。

底层流程:

调用 Dog("Buddy", 3)Python 先调用 __new__ 创建空对象再自动调用 __init__(新对象, "Buddy", 3) 初始化

3.self:实例自身的引用

self 不是关键字,但约定俗成必须作为第一个参数。它指向当前正在操作的实例对象。通过 self.xxx 访问实例属性或方法。class Counter: def __init__(self): self.count = 0 def increment(self): self.count += 1 # 修改当前实例的 count def reset(self): self.count = 0

为什么需要 self?
因为 Python 要明确区分:这是实例自己的数据,不是局部变量

4.类属性 vs 实例属性

类型定义位置访问方式生命周期共享性类属性class 块内,方法外类名.attr 或 实例.attr类加载时创建所有实例共享实例属性__init__ 或方法中(用 self.xxx)实例.attr实例创建时创建每个实例独立

代码如下:

class Circle: pi = 3.14159 # 类属性(所有圆共享) def __init__(self, radius): self.radius = radius # 实例属性(每个圆不同)c1 = Circle(2)c2 = Circle(3)print(c1.pi) # 3.14159(通过实例访问类属性)Circle.pi = 3.14 # 修改类属性print(c2.pi) # 3.14(所有实例都受影响!)

⚠️ 注意:不要用可变对象(如列表、字典)作为类属性默认值!

1.实例方法(Instance Method)

默认类型,第一个参数是 self可访问实例属性和类属性def get_info(self): return f"{self.name} is {self.age} years old"

2.类方法(Class Method)

用 @classmethod 装饰第一个参数是 cls(代表类本身)常用于替代构造函数或操作类属性@classmethoddef from_string(cls, emp_str): name, age = emp_str.split('-') return cls(name, int(age)) # 创建新实例# 使用emp = Employee.from_string("Alice-30")

3.静态方法(Static Method)

用 @staticmethod 装饰没有 self 或 cls 参数行为上像普通函数,只是逻辑上属于类@staticmethoddef is_adult(age): return age >= 18# 使用print(Employee.is_adult(20)) # True

1.继承(Inheritance)

子类自动获得父类的属性和方法。

class Animal: def __init__(self, name): self.name = name def speak(self): raise NotImplementedError("Subclass must implement")class Dog(Animal): # 继承 Animal def speak(self): return f"{self.name} says Woof!"class Cat(Animal): def speak(self): return f"{self.name} says Meow!"

2.super:调用父类方法

class Bird(Animal): def __init__(self, name, can_fly=True): super.__init__(name) # 调用父类 __init__ self.can_fly = can_fly

✅ 典型应用场景

建模现实世界实体:用户、订单、车辆、游戏角色封装复杂逻辑:数据库连接器、API 客户端实现设计模式:单例、工厂、策略模式等

✅ 最佳实践

写 docstring:说明类的用途python编辑class BankAccount: """表示一个银行账户,支持存款、取款和查询余额"""使用类型注解(Python 3.6+)python编辑def __init__(self, name: str, balance: float = 0.0) -> None: self.name = name self.balance = balance避免过度设计:简单脚本不一定需要类优先组合而非继承:除非有明确的“is-a”关系class Rectangle: """矩形类,支持面积、周长计算""" def __init__(self, width: float, height: float): if width float: """计算面积""" return self.width * self.height def perimeter(self) -> float: """计算周长""" return 2 * (self.width + self.height) def __str__(self) -> str: return f"Rectangle({self.width}x{self.height})"# 使用rect = Rectangle(4, 5)print(rect) # Rectangle(4x5)print(rect.area) # 20维度说明封装将数据和操作绑定在一起,隐藏内部细节复用通过继承避免重复代码扩展子类可重写父类行为(多态)抽象用类模拟现实世界或业务概念组织让大型项目结构更清晰

一句话记住:

class 是你创造“新类型”的工具——从此,你的程序不仅能处理数字和字符串,还能处理“学生”、“订单”、“机器人”!

作为新手,建议先掌握:

定义类 + __init__实例属性与方法简单继承

来源:互联网AI工程师

相关推荐