当前位置:首页>python>Python学习第三课(第1节:类的继承与类装饰器)

Python学习第三课(第1节:类的继承与类装饰器)

  • 2026-02-01 07:04:47
Python学习第三课(第1节:类的继承与类装饰器)

Python 中类的继承与类装饰器

在上一节的课程中,我们已经初步探索了 Python 中的类,大概了解了类的使用方法。但还有一些需要进一步讲解的内容,那就是类的继承和类装饰器,尤其是类的继承,俗话说的好——“Python不知类继承,便称盖茨也枉然”

一、什么是类的继承?

“继承”这两个字应该很容易理解,听得最多的就是子女从父母那边继承了财产(当然,也可能是债务),没有财产继承的也会一定程度上继承父母的颜值、身高和性格等基因所决定的先天性因素。

Python 中的类也有这样的特点,可以继承另一个类的所有非私有属性

说到这里,需要补充一点上节课遗漏的知识点——私有属性。私有属性就是带双下划线(__)的属性,比如:self.__name__ = 'CMOS 三好先生' 中的 __name__ 属性就是私有属性。

言归正传!接着讲类的继承。

比如,我们有一个动物类,有 name 和 age 实例属性和 eat 实例方法(下文若无特殊说明,属性、方法均指实例的属性和方法):

class Animal:    def __init__(self, name, age):        self.name = name        self.age = age    def eat(self):        print(f"{self.name} is eating.")

我在前一节课说过人、猫、狗和兔子都是动物类,因为它们有一定的共性,比如有名字、年龄,会吃东西;也有一定的差异,比如人会说话会模仿动物叫,猫叫是“喵喵喵”,狗吠是“汪汪汪”,兔子则不会叫。

那么,我们要如何定义人、猫、狗和兔子的类呢?按照 Animal 类重新写一遍?这时候“继承”就需要派上用场了!

下面我就以猫、狗作为例子(至于人嘛,就别来凑热闹了)来看看如何继承 Animal 类:
class Cat(Animal):    def __init__(self, name, age, breed):        super().__init__(name, age)        self.breed = breed    def meow(self):        print(f"{self.name} is meowing.")class Dog(Animal):    def __init__(self, name, age, breed):        super().__init__(name, age)        self.breed = breed    def bark(self):        print(f"{self.name} is barking.")# 子类用法if __name__ == "__main__":    persian = Cat("Tom"5"Persian")    persian.eat()    persian.meow()    labrador = Dog("Rufus"3"Labrador")    labrador.eat()    labrador.bark()

从上述的代码可以看出,猫和狗的 class 定义时,都加上了“(Animal)”,这个括号内的类名就表示继承的父类,也就是说 Animal 是 Cat 和 Dog 类的父类,Cat 和 Dog 类是 Animal 类的子类。因为都是继承于 Animal 类,所以我们也把 Cat 和 Dog 类叫做兄弟子类。

因为子类拥有父类的所有非私有属性,所以 Cat 和 Dog 都有 name、age 和 eat 属性,我们就不用再重复写这些代码。

但是,你们会发现在 __init__ 方法中,我们新增了一行 super().__init__(name, age),还增加了一个 breed 参数,然后赋值给了子类的 breed 属性。

先说 breed 属性,这是 Cat 和 Dog 类新增的属性,用来表示猫和狗的品种,这个就不用多解释了。

再来说 super() ,这是类中的内置函数。在子类中,super() 按照继承顺序调用“下一个父类”的方法。通常用来调用被重写的父类方法(比如 __init__ 方法)。

super() 返回的是一个“代理对象”,通过这个对象可以访问父类(或多重继承链上的其他类)中的方法和属性,而不需要写父类的类名。说到这里,就引出了一个新的概念——多重继承,我们后面会详细介绍。

再来看看两个子类里新增的方法:Cat 类里的 meow() 和 Dog 类里的 bark()。这就是定义了该子类特有的方法,其父类和其他兄弟子类的实例都不能调用。

讲到这里,单继承的逻辑就讲完了,接下来我们来学习多重继承。


二、什么是多重继承?

顾名思义,“多重继承”就表示有多个继承的父对象。可以这样理解,一个子类可以继承多个类的属性。比如猫和狗,除了是动物之外,也可以是人类的宠物。我们就可以写下面这样的代码(以 Cat 类为例):

class Pet:    def __init__(self, breed, owner, nickname):        self.breed = breed        self.owner = owner        self.nickname = nickname    def play(self):        print(f"{self.nickname} is playing with {self.owner}.")class PetCat(Cat, Pet):    def __init__(self, name, age, breed, owner, nickname):        super().__init__(name, age, breed)        Pet.__init__(self, breed, owner, nickname)    def info(self):        print(f"Name: {self.name}, Age: {self.age}, Breed: "                + f"{self.breed}, Owner: {self.owner}, Nickname: {self.nickname}")if __name__ == '__main__':    pet_persian = PetCat("Tom"5"Persian""John""Tommy")    pet_persian.eat()    pet_persian.meow()    pet_persian.play()    pet_persian.info()

Pet 类是新增的一个表示宠物的类,有breed、owenr、nickname 和 play 属性,PetCat 类是表示宠物猫的类,继承了 Cat 和 Pet 类。通过最后的初始化和调用代码可以看出,PetCat 继承了 Animal、Cat 和 Pet 类的属性。

需要多说几句,PetCat 类的继承顺序很重要,如果写成“PetCat(Pet, Cat)”,运行后续的代码就会报错:

Traceback (most recent call last):  File "lesson3_2.py", line 56, in <module>    pet_persian.eat()  File "lesson3_2.py", line 7, in eat    print(f"{self.name} is eating.")AttributeError: 'PetCat' object has no attribute 'name'

因为后面 __init__ 方法里的 super(PetCat, self).__init__ 里的 super 方法会返回多重继承的第一个父类 Pet 的代理对象,然后下面一行 Pet.__init__ 又进行了一次初始化,于是相当于用 Pet.__init__ 初始化了两次,没有调用到 Cat 类的 __init__ 方法,最后在调用 pet_persian.eat() 时就会报错了。

所以,如果在多重继承时,使用 super() 继承初始化方法必须传入第一个继承父类的 __init__ 参数,其他父类的则需要显示调用 __init__ 方法(比如:XXX.__init__(...))。

当然,也可以都用显示调用的方式对子类进行初始化,这样就不需要考虑继承的类的顺序了。比如:

class PetCat(PetCat):    def __init__(self, name, age, breed, owner, nickname):        Cat.__init__(self, name, age, breed)        Pet.__init__(self, breed, owner, nickname)  # 等效于 super().__init__(...)

需要注意 super().__init__ 和 <ParentClass>.__init__ 的参数区别,前者不需要传入 self 参数

至于多重继承的父类顺序的问题,这个是一个叫做 MRO(Method Resolution Order,方法解析顺序)的机制决定的。

MRO 是确定多重继承中方法和属性查找顺序的规则,它通过C3线性化算法(C3 Linearization)生成一个有序列表,保证了查找的一致性、局部优先单调性,防止了“菱形继承(钻石继承)”等复杂情况下的歧义,该算法在Python 3及新式类中是标准实现,可通过__mro__mro()方法查看。
print(PetCat.mro())
结果如下:

[<class'__main__.PetCat'>, <class'__main__.Cat'>, <class'__main__.Animal'>, <class'__main__.Pet'>, <class'object'>]

关于 MRO 的详细讲解,这里就不继续展开了,可以简单理解为:多重继承时,多个父类,如果有相同的属性,那么先继承的父类里的属性优先继承。

另外,在多重继承中,super() 保证了公共父类只被初始化一次。比如:

class Base:    def __init__(s):        print('Base init.')class A(Base):    def __init__(s):        print('A init.')        super().__init__()        print('A init end.')class B(Base):    def __init__(s):        print('B init.')        super().__init__()        print('B init end.')class C(A, B):    def __init__(s):        print('C init.')        super().__init__()        print('C init end.')C()

运行结果如下:

可以看到“Base init.”只显示了一次,说明 Base 类的 __init__ 方法只调用了一次。如果把 C 类中的 super().__init__() 修改为父类显示调用__init__,如下:

class C(AB):    def __init__(s):        print('C init.')        A.__init__(s)        B.__init__(s)        print('C init end.')

运行结果如下:

你会发现,不仅 Base.__init__ 调用了两次,A.__init__(s) 调用时,竟然还调用了 B.__init__(s) !!!

可见多重继承时,显示调用 __init__ 有多么浪费资源了吧?所以,多重继承的父类参数相同时,使用 super() 可以大大降低资源消耗。

如果父类的参数不同呢?那就只能像上面的 PetCat 那样对第一个父类使用 super() 调用,其余的就只能显示调用了。所以,要记得把初始化最耗资源的父类作为第一个继承的父类。

最后,还需要对 super() 再进行一个隐藏知识点的说明,仍然以上面的 ABC 类为例。

此时的 MRO 为:

C->A->B->Base->object(Python 中的顶级对象)
  • C 类 __init__ 方法中的 super().__init__() 等价于 super(C, s).__init__()。
  • super(C, s).__init__()会依次调用 A.__init__(s) 、B.__init__(s) 和 Base.__init__(s)。
  • super(A, s).__init__() 会依次调用 B.__init__(s) 和 Base.__init__(s)。
  • super(B, s).__init__() 则只会调用 Base.__init__(s)。

也就是说,super() 的第一个参数,表示 MRO 列表中的起点,起点的类不会调用初始化方法(可以课后自己尝试一下)。

讲到这里,关于类的继承这档子事儿基本上就已经讲完了。接下来,我们再来看看类装饰器


三、装饰的艺术 —— 类装饰器

1、类属性装饰器

类属性装饰器是一种特殊的装饰器,用于定义类的属性访问器 getter、修改器 setter 和删除器 deleter。Python内置的property函数是实现类属性装饰器的常用方法。下面是一个示例:

class Student:    def __init__(self):        self._score = 0    @property    def score(self):        return self._scorestudent = Student()print(student.score)student.score = 60  # 报错:AttributeError: can't set attribute

类属性装饰器可以限制类属性的访问权限以及合法性校验。比如上面的例子就是给 Student 类设置了一个只读属性 score,但没有设置修改器 setter,修改属性时就会报错。

下面,我们给 score 属性设置一个修改器 @score.setter

class Student:    def __init__(self):        self._score = 0    @property    def score(self):        return self._score    @score.setter    def score(self, value):        self._score = valuestudent = Student()print(student.score)student.score = 60print(student.score)  # 结果:60

这样就不会报错了!如果你想对 score 属性进行合法值校验,就可以在 setter 代码中增加相应的判断,比如:

    @score.setter    def score(self, value):        if not (0 <= value <= 100):            raise ValueError("分数必须在 0-100 之间")        self._score = value

此时赋值 student.score = 101就会抛出异常,从而保证 score 属性的值不会超过100。

除了类属性装饰器 property 之外,还有哪些类装饰器呢?还有两个分别是:classmethod 和 staticmethod。这两个名字一看就很好理解,一个是类方法,一个是静态方法。那么,它们有什么用处呢?

别急,我们先来看看两者的使用方法:

class X(object):    x = 1    def func1(self):          print ('func1'    @classmethod    def func2(c):        print ('func2')        print (c.x)        c().func1()   # 调用 foo 方法    @staticmethod    def func3():        print ('func3')X.func2()  # classmethod 不需要实例化X.func3()  # staticmethod 也不需要实例化

可以看出,classmethod 装饰的方法 func2,可以接受一个参数 c(建议写作 cls 更符合 Python 编程约定),这个参数就是类 X 本身,可以用 print(id(c) == id(X)) 来比较两者的 id(内存地址)是否相同。类方法可以访问和修改类的属性状态,通常用于定义那些影响整个类而非某个实例的功能行为。

而 staticmethod 装饰的方法 func3,我们可以认为是类的静态方法,可以直接通过类来调用。一般来说,静态方法用于实现与类的具体实例无关的功能,其功能行为类似于普通函数,仅仅在逻辑上属于类的一种方法属性。‌

总之,类方法、静态方法再加上实例方法,正确使用这三种类型的方法,可以使代码逻辑更加清晰、结构组织更加良好,让开发者易于理解,从而有效地支持软件开发的面向对象编程范式(这个词经常应该会听说,可以理解为是一种公认的模式、理论或框架体系)。

所以,想要学好 Python 中的类,不仅仅是掌握语法就够了,更多的是要对类的设计理念和运行机制有深刻的理解。希望学完类的这2节课的内容,大家能从“写普通代码”进阶到“用类设计代码”。


好了,今天的课就讲到这里,内容和代码有点多,希望大家能够看懂并掌握相关知识点(一定要实战操作)。我们下一节课的内容是Python 中的迭代器和生成器。同学们,下课!

对了,对本节课的内容有任何疑问,欢迎在留言区给我留言哦~

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 19:59:29 HTTP/2.0 GET : https://f.mffb.com.cn/a/461212.html
  2. 运行时间 : 0.091726s [ 吞吐率:10.90req/s ] 内存消耗:4,578.41kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=19af3aa39bf2b0e77076e3b8cf589ad2
  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.000626s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000886s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000384s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000293s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000472s ]
  6. SELECT * FROM `set` [ RunTime:0.000196s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000571s ]
  8. SELECT * FROM `article` WHERE `id` = 461212 LIMIT 1 [ RunTime:0.000564s ]
  9. UPDATE `article` SET `lasttime` = 1770551969 WHERE `id` = 461212 [ RunTime:0.008439s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.006336s ]
  11. SELECT * FROM `article` WHERE `id` < 461212 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000567s ]
  12. SELECT * FROM `article` WHERE `id` > 461212 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000524s ]
  13. SELECT * FROM `article` WHERE `id` < 461212 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001026s ]
  14. SELECT * FROM `article` WHERE `id` < 461212 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000826s ]
  15. SELECT * FROM `article` WHERE `id` < 461212 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000769s ]
0.093401s