当前位置:首页>python>Python面向对象:多态,接口与抽象基类

Python面向对象:多态,接口与抽象基类

  • 2026-06-29 23:53:05
Python面向对象:多态,接口与抽象基类

你一定遇到过这样的场景:定义了多个不同的类,它们有同名的方法,但实现逻辑不同——比如“猫”和“狗”都有“叫”的方法,猫叫是“喵喵喵”,狗叫是“汪汪汪”;再比如“圆形”和“矩形”都有“计算面积”的方法,计算逻辑却截然不同。

很多新手学到这里会困惑:为什么要给不同的类定义同名方法?调用时怎么区分它们?接口和抽象基类又是什么?和多态有什么关系?甚至有人把“多态”和“重写”混为一谈,越学越乱。

其实多态是Python面向对象的三大核心(封装、继承、多态)之一,核心逻辑特别简单:同一方法,不同实现,调用时自动匹配对应逻辑;而接口和抽象基类,是多态的“规范者”,确保不同类的同名方法,符合统一标准,避免混乱。

📌 先破误区:3个新手必踩的多态认知坑

在学多态之前,先纠正3个最常见的误区,尤其适合新手快速避坑,避免混淆概念:

误区1:多态就是“重写”——其实不是!重写是多态的“基础”,但多态是“同一方法的不同实现,根据对象自动匹配”,重写只是实现多态的一种方式,二者不能划等号。

误区2:多态必须依赖继承——错!Python是动态语言,多态不强制依赖继承,只要不同类有同名方法(鸭子类型),就能实现多态;但继承+重写,是实现多态最规范、最常用的方式。

误区3:接口和抽象基类是一回事——二者相关但不同!接口是“方法规范”(只定义方法名,不实现逻辑),抽象基类是“强制规范”(不仅定义方法名,还强制子类必须实现该方法),抽象基类可以看作“带约束的接口”。

记住:多态的核心是“统一调用,不同实现”;接口是“软约束”,抽象基类是“硬约束”,二者都是为了让多态更规范、更易维护。

🔍 核心基础:多态的本质与简单实现

多态(Polymorphism),字面意思是“多种形态”,对应到Python面向对象中,就是:同一个方法名,在不同的类中有不同的实现,当调用这个方法时,无需判断对象类型,自动执行对应类的实现逻辑

核心逻辑:不关心对象“是什么类型”,只关心对象“能做什么”,只要对象有对应的方法,就能调用,实现“统一调用接口,不同功能实现”。

多态的实现非常简单,无需额外语法,只要满足“同名方法”即可,实战示例如下(结合前文继承知识点,衔接自然):

# 父类:动物类,定义公共方法(可省略,也可定义抽象方法)class Animal:    def speak(self):        # 父类方法可空实现,也可定义通用逻辑        pass# 子类1:猫类,继承自动物类,重写speak方法class Cat(Animal):    def speak(self):        print("喵喵喵~")# 子类2:狗类,继承自动物类,重写speak方法class Dog(Animal):    def speak(self):        print("汪汪汪!")# 子类3:鸟类,继承自动物类,重写speak方法class Bird(Animal):    def speak(self):        print("叽叽喳喳~")# 定义一个统一的调用函数(核心:不判断对象类型,直接调用方法)def animal_speak(animal):    # 只要对象有speak方法,就能调用,实现多态    animal.speak()# 创建不同的对象cat = Cat()dog = Dog()bird = Bird()# 统一调用同一个函数,自动执行对应类的方法animal_speak(cat)  # 输出:喵喵喵~animal_speak(dog)  # 输出:汪汪汪!animal_speak(bird) # 输出:叽叽喳喳~

多态的3个核心特性:

1.  同名方法:不同类有相同名称的方法(如speak),这是多态的基础;

2.  自动匹配:调用方法时,无需判断对象的具体类型,Python会自动匹配对应类的实现;

3.  可扩展性:新增一个子类(如猪类),只要重写speak方法,无需修改统一调用函数,就能直接使用,符合“开放-封闭”原则。

补充说明:Python的多态是“动态多态”,无需像Java那样强制声明接口或继承,只要满足“鸭子类型”(长得像鸭子,叫声像鸭子,就是鸭子),即有同名方法,就能实现多态——这也是Python多态的灵活之处。

🔧 进阶重点:接口的定义与使用

前面提到,多态可以不依赖继承,但如果没有规范,多个类的同名方法可能出现“参数不一致、返回值不统一”的问题,导致调用混乱——比如有的类的speak方法需要参数,有的不需要,调用时就会报错。

接口(Interface)的核心作用,就是定义统一的方法规范:只声明方法名(以及参数、返回值要求),不实现方法逻辑,强制所有实现该接口的类,必须按照规范实现同名方法,避免多态调用时出现混乱。

注意:Python本身没有内置的“接口”关键字(其他语言如Java有),但我们可以通过“空实现的父类”或“第三方模块”来模拟接口,最常用、最简洁的方式是“空实现父类”。

实战示例(模拟接口,规范多态):

# 模拟接口:定义统一的方法规范(只声明方法,不实现逻辑)class SpeakInterface:    # 接口方法:声明方法名和参数,空实现    def speak(self, volume):        """        动物叫的接口方法        :param volume: 叫声音量(int类型)        :return: 无返回值        """        pass# 子类1:猫类,实现SpeakInterface接口,必须遵循接口规范class Cat(SpeakInterface):    # 必须实现speak方法,且参数、返回值与接口一致    def speak(self, volume):        print(f"喵喵喵~(音量:{volume})")# 子类2:狗类,实现SpeakInterface接口class Dog(SpeakInterface):    def speak(self, volume):        print(f"汪汪汪!(音量:{volume})")# 错误示例:子类未遵循接口规范(缺少volume参数)class Bird(SpeakInterface):    # 报错隐患:参数与接口不一致,调用时会出错    def speak(self):        print("叽叽喳喳~")# 统一调用函数(遵循接口规范,传入volume参数)def animal_speak(animal, volume):    animal.speak(volume)# 正确调用(遵循接口规范)cat = Cat()dog = Dog()animal_speak(cat, 5)  # 输出:喵喵喵~(音量:5)animal_speak(dog, 8)  # 输出:汪汪汪!(音量:8)# 错误调用(未遵循接口规范)bird = Bird()animal_speak(bird, 6)  # 报错:speak() takes 1 positional argument but 2 were given

接口的核心价值:规范多态的实现,确保所有子类的同名方法,参数、返回值一致,减少调用错误,提升代码的可维护性和可扩展性——尤其适合多人协作开发,避免有人随意修改方法规范。

📚 核心难点:抽象基类(ABC)的本质与用法

接口是“软约束”——即使子类不遵循接口规范(如上面的Bird类),Python也不会主动报错,只有在调用时才会暴露问题;而抽象基类(Abstract Base Class,简称ABC),是“硬约束”,它会强制子类必须实现指定的方法,否则无法创建子类对象,从根源上避免规范不统一的问题。

Python中,通过abc模块来实现抽象基类,核心是两个装饰器:@abstractmethod(装饰抽象方法)和@abstractclassmethod(装饰抽象类方法),抽象方法只声明,不实现。

核心原则:抽象基类不能直接创建对象,只能作为父类,被子类继承;子类必须实现抽象基类中所有的抽象方法,否则无法实例化。

实战示例(抽象基类的使用,强制规范多态):

# 导入abc模块,用于实现抽象基类from abc import ABC, abstractmethod# 定义抽象基类:继承ABC,作为所有动物的基类class Animal(ABC):    # 定义抽象方法:用@abstractmethod装饰,只声明,不实现    @abstractmethod    def speak(self, volume):        pass    # 定义另一个抽象方法:计算动物的寿命    @abstractmethod    def life_span(self):        pass# 子类1:猫类,继承抽象基类,必须实现所有抽象方法class Cat(Animal):    def speak(self, volume):        print(f"喵喵喵~(音量:{volume})")    def life_span(self):        print("猫的寿命:10-15年")# 子类2:狗类,继承抽象基类,实现所有抽象方法class Dog(Animal):    def speak(self, volume):        print(f"汪汪汪!(音量:{volume})")    def life_span(self):        print("狗的寿命:8-12年")# 错误示例1:子类未实现所有抽象方法(缺少life_span方法)class Bird(Animal):    def speak(self, volume):        print(f"叽叽喳喳~(音量:{volume})")    # 未实现life_span抽象方法,无法实例化# 错误示例2:直接创建抽象基类对象animal = Animal()  # 报错:Can't instantiate abstract class Animal with abstract method life_span# 正确示例:创建子类对象,调用方法cat = Cat()cat.speak(5)       # 输出:喵喵喵~(音量:5)cat.life_span()    # 输出:猫的寿命:10-15年dog = Dog()dog.speak(8)       # 输出:汪汪汪!(音量:8)dog.life_span()    # 输出:狗的寿命:8-12年# 错误调用:Bird类未实现所有抽象方法,无法创建对象# bird = Bird()  # 报错:Can't instantiate abstract class Bird with abstract method life_span

抽象基类的核心价值:

1.  强制约束:从根源上确保子类实现指定方法,避免“接口规范不被遵守”的问题;

2.  统一标准:明确父类的方法规范,让多态的实现更严谨,适合大型项目和多人协作;

3.  避免实例化:抽象基类本身是“模板规范”,不能直接创建对象,只能作为父类被继承,符合面向对象的“抽象”思想。

补充说明:抽象基类和接口的区别——接口只定义方法规范,不限制子类的其他实现;抽象基类不仅定义规范,还可以包含非抽象方法(有具体实现的方法),子类可以直接复用这些非抽象方法。

💡 实战用法:多态+抽象基类的完整应用

结合前面的知识点,我们用“抽象基类+多态”实现一个完整的实战场景:定义一个“图形抽象基类”,规范“计算面积”和“计算周长”两个方法,然后让圆形、矩形、正方形子类继承该抽象基类,实现多态调用,确保所有图形都能统一调用方法,且规范一致。

from abc import ABC, abstractmethod# 抽象基类:图形类,定义统一规范class Shape(ABC):    @abstractmethod    def area(self):        """计算图形面积,抽象方法,子类必须实现"""        pass    @abstractmethod    def perimeter(self):        """计算图形周长,抽象方法,子类必须实现"""        pass# 子类1:圆形类,实现抽象方法class Circle(Shape):    def __init__(self, radius):        self.radius = radius  # 半径    def area(self):        # 圆的面积公式:πr²        return 3.14 * self.radius ** 2    def perimeter(self):        # 圆的周长公式:2πr        return 2 * 3.14 * self.radius# 子类2:矩形类,实现抽象方法class Rectangle(Shape):    def __init__(self, length, width):        self.length = length  # 长        self.width = width    # 宽    def area(self):        # 矩形面积:长×宽        return self.length * self.width    def perimeter(self):        # 矩形周长:2×(长+宽)        return 2 * (self.length + self.width)# 子类3:正方形类,实现抽象方法(继承矩形类,复用部分逻辑)class Square(Rectangle):    def __init__(self, side):        # 正方形是特殊的矩形,长和宽相等        super().__init__(side, side)# 统一调用函数:计算并打印图形的面积和周长def shape_info(shape):    print(f"图形面积:{shape.area():.2f}")    print(f"图形周长:{shape.perimeter():.2f}")    print("-" * 20)# 创建不同图形对象circle = Circle(radius=5)rectangle = Rectangle(length=6, width=4)square = Square(side=5)# 多态调用:统一调用shape_info函数,自动匹配对应子类的方法shape_info(circle)    # 输出:圆形的面积和周长shape_info(rectangle) # 输出:矩形的面积和周长shape_info(square)    # 输出:正方形的面积和周长运行结果:图形面积:78.50图形周长:31.40--------------------图形面积:24.00图形周长:20.00--------------------图形面积:25.00图形周长:20.00--------------------

解读:这个案例完美体现了“抽象基类+多态”的价值——抽象基类规范了所有图形必须实现“计算面积”和“周长”的方法,确保规范统一;多态实现了“统一调用,不同实现”,无需判断图形类型,直接调用方法即可得到对应结果,代码简洁、可维护性强。

❌ 新手必避的5个多态+抽象基类常见坑

多态、接口、抽象基类是新手的重灾区,以下5个坑一定要避开,每个坑都附具体解决方案,遇到直接对照解决:

  • 坑1:把“重写”当成“多态”,以为重写就是多态 → 解决方案:记住“重写是基础,多态是结果”,多态是“统一调用不同实现”,重写只是实现多态的一种方式。

  • 坑2:使用抽象基类时,忘记导入abc模块,或未继承ABC → 解决方案:必须导入from abc import ABC, abstractmethod,且抽象基类必须继承ABC,否则@abstractmethod装饰器无效。

  • 坑3:子类继承抽象基类,却未实现所有抽象方法,试图创建对象 → 解决方案:子类必须实现抽象基类中所有带@abstractmethod装饰的方法,否则无法实例化。

  • 坑4:误以为Python有内置“interface”关键字,试图直接定义接口 → 解决方案:Python无interface关键字,用“空实现父类”或“抽象基类”模拟接口即可。

  • 坑5:过度使用抽象基类,导致代码冗余 → 解决方案:小型项目、简单场景,可用“鸭子类型”实现多态(无需抽象基类);大型项目、多人协作,再用抽象基类强制规范。

💡 实战案例:完整演示多态+接口+抽象基类的综合用法

结合上面的知识点,写一个完整的综合案例,覆盖多态、接口模拟、抽象基类、方法重写,跟着敲一遍,就能彻底掌握三者的核心用法,应对面试和开发。

from abc import ABC, abstractmethod# 1. 抽象基类:定义支付接口规范class Payment(ABC):    @abstractmethod    def pay(self, amount):        """        支付接口方法        :param amount: 支付金额(float)        :return: 支付结果(str)        """        pass# 2. 子类1:微信支付,实现支付接口class WeChatPay(Payment):    def pay(self, amount):        return f"微信支付成功,金额:{amount:.2f}元"# 3. 子类2:支付宝支付,实现支付接口class Alipay(Payment):    def pay(self, amount):        return f"支付宝支付成功,金额:{amount:.2f}元"# 4. 子类3:银行卡支付,实现支付接口class BankPay(Payment):    def pay(self, amount):        return f"银行卡支付成功,金额:{amount:.2f}元"# 5. 模拟接口:订单接口,规范订单创建方法(空实现父类)class OrderInterface:    def create_order(self, order_id, amount):        """创建订单接口"""        pass# 6. 订单类:实现订单接口,结合多态调用支付方法class Order(OrderInterface):    def create_order(self, order_id, amount, payment):        # 调用支付方法(多态:根据payment对象类型,自动匹配对应支付方式)        result = payment.pay(amount)        return f"订单{order_id}创建成功,{result}"# 7. 多态调用:创建不同支付方式对象,统一调用订单方法wechat_pay = WeChatPay()alipay = Alipay()bank_pay = BankPay()# 创建订单对象order = Order()# 统一调用create_order方法,传入不同支付对象print(order.create_order("ORDER001"199.99, wechat_pay))print(order.create_order("ORDER002"299.50, alipay))print(order.create_order("ORDER003"599.00, bank_pay))运行结果:订单ORDER001创建成功,微信支付成功,金额:199.99订单ORDER002创建成功,支付宝支付成功,金额:299.50订单ORDER003创建成功,银行卡支付成功,金额:599.00

📝 核心总结

多态、接口、抽象基类,核心是“规范+灵活”,记住以下3个核心要点,就能轻松掌握,打通Python面向对象的最后一道难关:

1.  多态:同一方法,不同实现,调用时自动匹配对应逻辑,核心是“鸭子类型”,无需强制继承,灵活高效;

2.  接口:模拟方法规范,是“软约束”,确保多态调用时方法参数、返回值统一,避免混乱;

3.  抽象基类:通过abc模块实现,是“硬约束”,强制子类实现指定方法,从根源上规范多态,适合大型项目。

多态是面向对象编程的核心思想之一,它让代码更灵活、更易扩展;而接口和抽象基类,让多态更规范、更易维护。掌握了这三者,你就能构建更严谨、更具扩展性的面向对象代码,应对复杂的开发场景和面试问题。

✨ 小任务:定义一个“电器抽象基类”,包含“开机”和“关机”两个抽象方法;定义“电视类”“空调类”“冰箱类”三个子类,继承抽象基类并实现抽象方法;定义一个统一调用函数,实现多态调用,查看运行结果。

读懂代码的骨架,驾驭AI的血肉,做数字时代的超级个体🔥

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 16:39:03 HTTP/2.0 GET : https://f.mffb.com.cn/a/489561.html
  2. 运行时间 : 0.419328s [ 吞吐率:2.38req/s ] 内存消耗:4,642.87kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=9858bc5e877cb1a2155e68801508229e
  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.000720s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000700s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000995s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.003616s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000657s ]
  6. SELECT * FROM `set` [ RunTime:0.002601s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000630s ]
  8. SELECT * FROM `article` WHERE `id` = 489561 LIMIT 1 [ RunTime:0.031509s ]
  9. UPDATE `article` SET `lasttime` = 1783067943 WHERE `id` = 489561 [ RunTime:0.024812s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.007475s ]
  11. SELECT * FROM `article` WHERE `id` < 489561 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.038941s ]
  12. SELECT * FROM `article` WHERE `id` > 489561 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.016465s ]
  13. SELECT * FROM `article` WHERE `id` < 489561 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.075894s ]
  14. SELECT * FROM `article` WHERE `id` < 489561 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.063793s ]
  15. SELECT * FROM `article` WHERE `id` < 489561 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.016420s ]
0.420915s