当前位置:首页>python>Python @classmethod(类方法)自学完全指南

Python @classmethod(类方法)自学完全指南

  • 2026-02-06 19:38:12
Python @classmethod(类方法)自学完全指南

1. 类方法基础概念

1.1 什么是类方法

类方法是与类关联的方法,而不是与实例关联。它接收类本身(通常命名为cls)作为第一个参数,而不是实例(self)。

1.2 与实例方法的区别

特性
实例方法
类方法
第一个参数
self
(实例)
cls
(类本身)
装饰器
@classmethod
调用方式
实例.方法()
类.方法() 或 实例.方法()
访问权限
可访问实例和类属性
只能访问类属性

2. 类方法的创建与使用

2.1 基本语法

classMyClass:    @classmethoddefclass_method(cls, arg1, arg2):# cls 是类本身,不是实例# 可以访问类属性,但不能访问实例属性returnf"类方法被调用,类名: {cls.__name__}"

2.2 简单示例

classEmployee:    company = "ABC Corporation"# 类属性def__init__(self, name, salary):        self.name = name        # 实例属性        self.salary = salary    # 实例属性    @classmethoddefget_company_info(cls):# 类方法只能访问类属性,不能访问实例属性returnf"公司名称: {cls.company},员工类: {cls.__name__}"defget_employee_info(self):# 实例方法可以访问实例属性和类属性returnf"姓名: {self.name},公司: {self.company}"# 使用类方法print(Employee.get_company_info())  # 通过类调用# 创建实例emp = Employee("张三"5000)# 也可以通过实例调用类方法print(emp.get_company_info())       # 通过实例调用# 实例方法只能通过实例调用print(emp.get_employee_info())

3. 类方法的主要用途

3.1 替代构造函数的工厂方法

classDate:def__init__(self, year, month, day):        self.year = year        self.month = month        self.day = day    @classmethoddeffrom_string(cls, date_string):"""从字符串'YYYY-MM-DD'创建Date对象"""        year, month, day = map(int, date_string.split('-'))return cls(year, month, day)  # 相当于 Date(year, month, day)    @classmethoddeffrom_timestamp(cls, timestamp):"""从时间戳创建Date对象"""import datetime        dt = datetime.datetime.fromtimestamp(timestamp)return cls(dt.year, dt.month, dt.day)def__str__(self):returnf"{self.year}-{self.month:02d}-{self.day:02d}"# 使用不同的工厂方法创建对象date1 = Date(20231015)date2 = Date.from_string("2023-10-20")date3 = Date.from_timestamp(1697788800)  # 2023-10-20的时间戳print(date1)  # 2023-10-15print(date2)  # 2023-10-20print(date3)  # 2023-10-20

3.2 类级别的配置和工具函数

classMathOperations:    PI = 3.14159    E = 2.71828    @classmethoddefcircle_area(cls, radius):"""计算圆面积"""return cls.PI * radius ** 2    @classmethoddefset_precision(cls, pi_precision, e_precision):"""设置数学常量的精度"""        cls.PI = round(3.141592653589793, pi_precision)        cls.E = round(2.718281828459045, e_precision)    @classmethoddefget_constants(cls):"""获取所有数学常量"""return {'PI': cls.PI,'E': cls.E,'GOLDEN_RATIO'1.61803        }# 使用类方法print(f"圆面积 (r=5): {MathOperations.circle_area(5)}")# 修改配置MathOperations.set_precision(pi_precision=4, e_precision=4)print(f"更新后的PI: {MathOperations.PI}")# 获取所有常量print(f"数学常量: {MathOperations.get_constants()}")

3.3 继承中的多态行为

classShape:    @classmethoddefcreate_default(cls):"""创建默认形状 - 在子类中可以有不同的实现"""raise NotImplementedError("子类必须实现此方法")    @classmethoddefget_type_info(cls):"""获取类型信息"""returnf"形状类型: {cls.__name__}"classCircle(Shape):def__init__(self, radius=1):        self.radius = radius    @classmethoddefcreate_default(cls):"""Circle类的默认创建方法"""return cls(radius=1)  # 默认半径为1classRectangle(Shape):def__init__(self, width=1, height=1):        self.width = width        self.height = height    @classmethoddefcreate_default(cls):"""Rectangle类的默认创建方法"""return cls(width=1, height=1)  # 默认宽高为1# 多态行为演示shapes = [Circle, Rectangle]for shape_class in shapes:# 每个类有自己的create_default实现    shape = shape_class.create_default()    print(f"{shape_class.__name__}{shape_class.get_type_info()}")    print(f"创建的默认对象: {shape.__dict__}")

4. 应用示例

4.1 数据库模型示例

classUser:    users_db = []  # 模拟数据库def__init__(self, username, email, role="user"):        self.username = username        self.email = email        self.role = role    @classmethoddefcreate_user(cls, username, email, role="user"):"""创建用户并保存到数据库"""# 验证逻辑if cls.find_by_username(username):raise ValueError(f"用户名 {username} 已存在")# 创建用户        user = cls(username, email, role)        cls.users_db.append(user)return user    @classmethoddeffind_by_username(cls, username):"""根据用户名查找用户"""for user in cls.users_db:if user.username == username:return userreturnNone    @classmethoddefget_users_by_role(cls, role):"""根据角色获取用户列表"""return [user for user in cls.users_db if user.role == role]    @classmethoddefget_statistics(cls):"""获取用户统计信息"""        total = len(cls.users_db)        roles = {}for user in cls.users_db:            roles[user.role] = roles.get(user.role, 0) + 1return {"total_users": total,"by_role": roles        }# 使用示例admin = User.create_user("admin""admin@example.com""admin")user1 = User.create_user("user1""user1@example.com")user2 = User.create_user("user2""user2@example.com")print(f"查找用户: {User.find_by_username('admin').email}")print(f"所有用户: {User.get_statistics()}")

4.2 配置文件管理示例

import jsonclassAppConfig:    _config = {"version""1.0.0","debug"False,"max_connections"100    }    @classmethoddefload_from_file(cls, filename):"""从文件加载配置"""with open(filename, 'r'as f:            cls._config.update(json.load(f))        print(f"配置已从 {filename} 加载")    @classmethoddefsave_to_file(cls, filename):"""保存配置到文件"""with open(filename, 'w'as f:            json.dump(cls._config, f, indent=2)        print(f"配置已保存到 {filename}")    @classmethoddefget(cls, key, default=None):"""获取配置项"""return cls._config.get(key, default)    @classmethoddefset(cls, key, value):"""设置配置项"""        cls._config[key] = value    @classmethoddefshow_all(cls):"""显示所有配置"""        print("当前配置:")for key, value in cls._config.items():            print(f"  {key}{value}")# 使用示例AppConfig.show_all()# 修改配置AppConfig.set("debug"True)AppConfig.set("timeout"30)# 保存和加载配置AppConfig.save_to_file("config.json")# AppConfig.load_from_file("config.json")  # 从文件加载AppConfig.show_all()

4.3 缓存机制实现示例

from functools import lru_cacheimport timeclassDataProcessor:    _cache = {}def__init__(self, data):        self.data = data    @classmethoddefprocess_with_cache(cls, data_id, data):"""带缓存的处理方法"""if data_id in cls._cache:            print(f"从缓存获取数据: {data_id}")return cls._cache[data_id]        print(f"处理新数据: {data_id}")# 模拟耗时处理        time.sleep(0.5)        processor = cls(data)        result = processor._complex_processing()# 缓存结果        cls._cache[data_id] = resultreturn result    @classmethoddefclear_cache(cls):"""清空缓存"""        cls._cache.clear()        print("缓存已清空")    @classmethoddefget_cache_info(cls):"""获取缓存信息"""return {"cached_items": len(cls._cache),"cache_keys": list(cls._cache.keys())        }def_complex_processing(self):"""复杂的处理逻辑"""returnf"处理结果: {self.data.upper()}"# 使用示例print("第一次处理:")result1 = DataProcessor.process_with_cache("data1""hello")print(result1)print("\n第二次处理相同数据:")result2 = DataProcessor.process_with_cache("data1""hello")  # 从缓存获取print(result2)print("\n处理新数据:")result3 = DataProcessor.process_with_cache("data2""world")print(result3)print(f"\n缓存信息: {DataProcessor.get_cache_info()}")DataProcessor.clear_cache()print(f"清空后缓存信息: {DataProcessor.get_cache_info()}")

5. 类方法与静态方法的对比

classCalculator:    @staticmethoddefadd(a, b):"""静态方法:不访问类或实例的任何属性"""return a + b    @classmethoddefoperation_count(cls):"""类方法:可以访问和修改类属性"""ifnot hasattr(cls, '_count'):            cls._count = 0        cls._count += 1return cls._count    @classmethoddefadd_with_count(cls, a, b):"""类方法:结合业务逻辑和类状态"""        count = cls.operation_count()        result = cls.add(a, b)  # 调用静态方法        print(f"操作 #{count}{a} + {b} = {result}")return result# 使用对比print(f"静态方法: {Calculator.add(53)}")print(f"类方法计数: {Calculator.operation_count()}")print(f"带计数的加法: {Calculator.add_with_count(1020)}")print(f"总操作次数: {Calculator.operation_count()}")

6. 其他用法

6.1 链式调用

classQueryBuilder:def__init__(self):        self.query = ""    @classmethoddefselect(cls, *columns):"""创建SELECT查询"""        builder = cls()        columns_str = ", ".join(columns) if columns else"*"        builder.query = f"SELECT {columns_str}"return builderdeffrom_table(self, table):"""添加FROM子句"""        self.query += f" FROM {table}"return selfdefwhere(self, condition):"""添加WHERE子句"""        self.query += f" WHERE {condition}"return selfdefbuild(self):"""构建完整查询"""return self.query# 链式调用示例query = QueryBuilder.select("id""name""email") \                   .from_table("users") \                   .where("age > 18") \                   .build()print(f"生成的SQL: {query}")

6.2 单例模式实现

classSingleton:    _instance = Nonedef__init__(self, name):        self.name = name    @classmethoddefget_instance(cls, name="Default"):"""获取单例实例"""if cls._instance isNone:            print(f"创建新实例: {name}")            cls._instance = cls(name)else:            print(f"返回现有实例: {cls._instance.name}")return cls._instance# 测试单例模式singleton1 = Singleton.get_instance("First")singleton2 = Singleton.get_instance("Second")  # 不会创建新实例print(f"singleton1 is singleton2: {singleton1 is singleton2}")print(f"实例名称: {singleton1.name}")

7. 试一试

7.1 练习题

  1. 创建一个Product类,使用类方法实现:

    • 从CSV字符串创建产品
    • 从字典创建产品
    • 获取所有产品类别的统计
  2. 实现一个Logger类,使用类方法:

    • 设置日志级别
    • 获取日志统计
    • 清空日志

7.2 参考答案

# 练习题1参考答案classProduct:    products = []def__init__(self, name, category, price):        self.name = name        self.category = category        self.price = price    @classmethoddeffrom_csv(cls, csv_string):"""从CSV字符串创建产品"""        name, category, price = csv_string.split(',')return cls(name.strip(), category.strip(), float(price.strip()))    @classmethoddeffrom_dict(cls, data):"""从字典创建产品"""return cls(data['name'], data['category'], data['price'])    @classmethoddefget_category_stats(cls):"""获取类别统计"""        stats = {}for product in cls.products:            stats[product.category] = stats.get(product.category, 0) + 1return statsdefsave(self):"""保存产品"""        self.products.append(self)return self# 练习题2参考答案classLogger:    _logs = []    _level = "INFO"    _levels = ["DEBUG""INFO""WARNING""ERROR"]    @classmethoddefset_level(cls, level):"""设置日志级别"""if level in cls._levels:            cls._level = level            cls.log(f"日志级别设置为: {level}""INFO")else:raise ValueError(f"无效的日志级别。可选: {cls._levels}")    @classmethoddeflog(cls, message, level="INFO"):"""记录日志"""if cls._levels.index(level) >= cls._levels.index(cls._level):            log_entry = {"timestamp": time.time(),"level": level,"message": message            }            cls._logs.append(log_entry)            print(f"[{level}{message}")    @classmethoddefget_stats(cls):"""获取日志统计"""        stats = {}for log in cls._logs:            stats[log['level']] = stats.get(log['level'], 0) + 1return {"total": len(cls._logs),"by_level": stats,"current_level": cls._level        }    @classmethoddefclear_logs(cls):"""清空日志"""        cls._logs.clear()        cls.log("所有日志已清空""INFO")

8. 总结

8.1 何时使用@classmethod

  1. 需要替代构造函数时:提供多种创建对象的方式
  2. 需要操作类属性时:修改或访问类级别的状态
  3. 需要工厂方法时:创建相关对象
  4. 需要工具函数时:与类相关但不依赖实例状态的功能
  5. 需要在继承中实现多态时:子类可以重写类方法

8.2 注意事项

  1. 类方法不能访问实例属性(除非通过实例参数)
  2. 类方法应该返回类的实例或与类相关的信息
  3. 避免在类方法中执行过于复杂的业务逻辑
  4. 合理使用类属性,避免全局状态污染

通过掌握@classmethod,可以编写更加灵活、可维护的面向对象代码,特别是在需要处理类级别状态或提供多种对象创建方式时。



作者简介:码上工坊,探索用编程为己赋能,定期分享编程知识和项目实战经验。持续学习、适应变化、记录点滴、复盘反思、成长进步。

重要提示:本文主要是记录自己的学习与实践过程,所提内容或者观点仅代表个人意见,只是我以为的,不代表完全正确,欢迎交流讨论。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 02:54:37 HTTP/2.0 GET : https://f.mffb.com.cn/a/468350.html
  2. 运行时间 : 0.192833s [ 吞吐率:5.19req/s ] 内存消耗:4,740.41kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=d032b9d2d348bfdb245f664b23038657
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001036s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001573s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000721s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000665s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001341s ]
  6. SELECT * FROM `set` [ RunTime:0.000591s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001456s ]
  8. SELECT * FROM `article` WHERE `id` = 468350 LIMIT 1 [ RunTime:0.001230s ]
  9. UPDATE `article` SET `lasttime` = 1770490477 WHERE `id` = 468350 [ RunTime:0.011515s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000578s ]
  11. SELECT * FROM `article` WHERE `id` < 468350 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000989s ]
  12. SELECT * FROM `article` WHERE `id` > 468350 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000420s ]
  13. SELECT * FROM `article` WHERE `id` < 468350 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000598s ]
  14. SELECT * FROM `article` WHERE `id` < 468350 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000629s ]
  15. SELECT * FROM `article` WHERE `id` < 468350 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002143s ]
0.194446s