当前位置: 首页 > news >正文

Python中class定义系统讲解

目录

一、Python 中 class 的基本概念

二、基本语法

三、关键组件说明

四、类变量 vs 实例变量

五、方法类型

六、继承与多态

七、特殊方法(Magic Methods)

八、数据封装:私有变量和属性访问

九、类方法工厂(Class Method Factory)

十、只读属性(Read-Only Property)

总结


一、Python 中 class 的基本概念

类(class)是创建对象的模板(蓝图)。它描述了对象的属性(变量)和行为(函数)。

在 Python 中,class 是一种可以生成对象的“可调用对象”,本质上是一种“工厂函数”。

可以通过 type(obj) 查看对象的类型。

常见用途场景包括:

场景

示例

面向对象开发

如电商系统中的“用户、商品、订单”类

封装逻辑与状态

比如一个“任务管理器”

模拟数据库模型

使用 ORM,如 SQLAlchemy 或 Django

创建插件、组件系统

自定义组件类、策略类等

二、基本语法

class 类名(父类名):def __init__(self, 参数):self.属性 = 参数def 方法名(self):pass

示例:

class Person:def __init__(self, name, age):  # 构造函数self.name = nameself.age = agedef greet(self):print(f"你好,我是 {self.name},今年 {self.age} 岁。")# 创建对象
p = Person("小明", 18)
p.greet()

三、关键组件说明

组件名

作用

class

定义一个类

__init__

构造函数,创建对象时自动调用

self

实例本身的引用,相当于 Java 中的 this

方法(函数)

定义类的行为(操作属性、实现功能)

属性(变量)

绑定在 self 上,表示对象的状态

四、类变量 vs 实例变量

class Dog:species = "犬类"  # 类变量,所有实例共享def __init__(self, name):self.name = name  # 实例变量dog1 = Dog("旺财")
dog2 = Dog("小黑")print(dog1.species)  # 犬类
print(dog2.name)     # 小黑

五、方法类型

方法类型

定义方式

特点

实例方法

def method(self)

最常用,操作实例对象

类方法

@classmethod + def method(cls)

操作类本身(cls 是类的引用)

静态方法

@staticmethod + def method()

与类无关,像普通函数放在类中

示例:

class MathTool:@staticmethoddef add(a, b):return a + b

六、继承与多态

class Animal:def speak(self):print("动物发出声音")class Dog(Animal):def speak(self):print("狗叫:汪汪!")a = Dog()
a.speak()  # 多态:根据对象实际类型调用

七、特殊方法(Magic Methods)

这些是 Python 的“魔术方法”,可重载以改变类行为。

方法名

作用

__init__

构造函数

__str__

打印字符串

__repr__

调试输出

__len__

len(obj) 时调用

__getitem__

支持下标访问 obj[key]

__eq__、__lt__

实现比较操作符

八、数据封装:私有变量和属性访问

Python 没有严格的私有变量,但使用约定:

  • _变量名:受保护的(不推荐外部访问)
  • __变量名:类内私有(有名称改写,防止冲突)
class User:def __init__(self, name):self.__name = name  # 私有变量def get_name(self):return self.__name

九、类方法工厂(Class Method Factory)

类方法工厂是指通过 @classmethod 创建实例的“备用构造器”,用于处理不同初始化需求。

示例:

使用类方法创建不同来源的对象

class User:def __init__(self, username, email):self.username = usernameself.email = email@classmethoddef from_string(cls, data_str):"""从字符串创建 User 实例"""name, email = data_str.split(",")return cls(name.strip(), email.strip())# 用法
user1 = User("alice", "alice@example.com")
user2 = User.from_string("bob, bob@example.com")print(user1.username)  # alice
print(user2.username)  # bob

类方法工厂的常见用途:

用途

示例

从字符串/JSON 初始化

User.from_json(json_str)

从数据库记录生成

Model.from_row(row)

批量构造对象

User.create_batch(list_of_dicts)

处理默认参数逻辑

Logger.with_default_settings()

十、只读属性(Read-Only Property)

使用 @property 修饰方法可以将其变为“属性形式访问的只读方法”。

示例:

定义一个只能读取的属性

class Circle:def __init__(self, radius):self._radius = radius@propertydef radius(self):return self._radius@propertydef area(self):return 3.1416 * self._radius ** 2# 用法
c = Circle(5)
print(c.radius)  # 5
print(c.area)    # 78.54# c.radius = 10  # ❌ 报错:AttributeError,只读

如果想支持只读+有条件写入?

可以使用 @radius.setter:

class Circle:def __init__(self, radius):self._radius = radius@propertydef radius(self):return self._radius@radius.setterdef radius(self, value):if value <= 0:raise ValueError("半径必须为正数")self._radius = value

总结

功能

用法关键字

用途说明

类方法工厂

@classmethod

用类方法替代构造器,返回类实例

只读属性

@property

把方法当属性用,用户无法修改

控制赋值逻辑

@property + @setter

限制属性的修改规则

http://www.xdnf.cn/news/875107.html

相关文章:

  • promise和异步编程
  • Java框架面试题
  • (1-6-3)Java 多线程
  • iptables实战案例
  • STM32最小CLion开发环境
  • L2-056 被n整除的n位数 - java
  • Docker慢慢学
  • unity+ spine切换武器不换皮肤解决方案
  • C#Winform中DevExpress下的datagridview 特定列可编辑,其他列不可编辑
  • “详规一张图”——香港土地利用数据
  • java.sql.BatchUpdateException: Incorrect string value: ‘\xF0\x9F\x91\x91**...‘
  • 面试题小结(真实面试)
  • Java编程常见错误与最佳实践
  • machine_env_loader must have been assigned before creating ssh child instance
  • hadoop集群启动没有datanode解决
  • PyCharm项目和文件运行时使用conda环境的教程
  • Python趣学篇:用数学方程绘制浪漫爱心
  • SpringBoot+Mybatisplus配置多数据源(超级简单!!!!)
  • #Java篇:学习node后端之sql常用操作
  • BBU 电源市场报告:深入剖析与未来展望​
  • 洛谷P1591阶乘数码
  • GO语言---函数命名返回值
  • 嵌入式系统中常用的开源协议
  • 41、响应处理-【源码分析】-自定义MessageConverter
  • [C]深入解析条件式日志宏的设计原理
  • Deepfashion2 数据集使用笔记
  • 2025年五一数学建模竞赛A题-支路车流量推测问题详细建模与源代码编写(一)
  • 洛谷 单源最短路径 Dijkstra算法+优先队列
  • 点云数据去噪(Point Cloud Processing Toolbox)
  • C++——智能指针 shared_ptr