当前位置:首页>python>Python面向对象:从类的基础到高级特性,一文吃透核心用法

Python面向对象:从类的基础到高级特性,一文吃透核心用法

  • 2026-03-23 00:40:49
Python面向对象:从类的基础到高级特性,一文吃透核心用法
在Python学习中,面向对象(OOP)是绕不开的核心知识点,而类(Class)作为面向对象的基石,很多人只停留在“定义类、创建实例、调用方法”的基础层面。但真正想用好Python面向对象,写出高可复用、高扩展性、易维护的代码,必须吃透其进阶与高级特性。
本文将严格遵循「基础→进阶→高级」的逻辑,从类的基础用法讲起,逐步深入进阶技巧,再拆解高级特性,结合实际案例拆解,帮你彻底打通Python面向对象的“任督二脉”,适合所有想系统掌握面向对象、从入门进阶到精通的Python开发者。

一、夯实基础:类与面向对象的入门核心(必学铺垫)

在进入进阶内容前,我们先完整掌握类的基础用法——这是后续所有进阶、高级特性的根基,跳过基础直接学进阶,只会越学越模糊。面向对象的核心是“将数据和操作数据的方法绑定”,而类就是实现这一核心的载体。

(一)类的定义与实例化(最基础操作)

类(Class)是一个“模板”,定义了对象(实例)的属性和方法;对象是类的“实例”,是具体的存在。比如“人类”是一个类,“张三”“李四”就是这个类的实例。
基础语法与示例:
# 1. 定义类:用class关键字,类名首字母大写(约定俗成)class Person:    # 类属性:属于类本身,所有实例共享    species = "人类"    # 构造方法:初始化实例属性,创建实例时自动调用    # self:代表当前实例,必须作为第一个参数    def __init__(self, name, age):        # 实例属性:属于单个实例,每个实例的属性值可以不同        self.name = name        self.age = age    # 实例方法:操作实例属性的方法,第一个参数必须是self    def introduce(self):        print(f"我叫{self.name},今年{self.age}岁,是{self.species}")# 2. 实例化:用类名()创建对象,传入__init__所需参数person1 = Person("张三"25)person2 = Person("李四"30)# 3. 调用实例方法person1.introduce()  # 输出:我叫张三,今年25岁,是人类person2.introduce()  # 输出:我叫李四,今年30岁,是人类# 4. 访问属性(类属性和实例属性)print(person1.name)  # 实例属性:张三print(Person.species)  # 类属性:人类print(person2.species)  # 实例可访问类属性:人类
关键注意点:
  • self是默认参数,代表当前实例,不能省略,调用方法时无需手动传入。
  • 类属性:所有实例共享,修改类属性会影响所有实例;实例属性:每个实例独有,修改一个实例的属性不影响其他实例。
  • 构造方法__init__是可选的,若不定义,Python会自动生成一个默认的空构造方法。

(二)面向对象核心三要素(基础版)

面向对象的核心是封装、继承、多态,基础版的用法的是入门关键,我们结合示例快速掌握:

1. 基础封装:隐藏简单细节

基础封装的核心是“将属性和方法放在一个类中”,外部通过实例调用方法,无需关心方法内部的实现细节。比如上面的Person类,我们调用introduce()方法,无需知道方法内部是如何打印的,只需传入实例即可。

2. 基础继承:复用代码

继承是让子类“继承”父类的属性和方法,子类可以直接使用父类的内容,无需重复编写,同时可以添加自己的属性和方法。
基础示例:
# 父类:Personclass Person:    def __init__(self, name, age):        self.name = name        self.age = age    def introduce(self):        print(f"我叫{self.name},今年{self.age}岁")# 子类:Student,继承自Personclass Student(Person):    # 重写父类的构造方法(添加子类特有属性)    def __init__(self, name, age, student_id):        # 调用父类的构造方法,复用父类的属性初始化逻辑        super().__init__(name, age)        # 子类特有属性        self.student_id = student_id    # 子类特有方法    def study(self):        print(f"学生{self.name}(学号:{self.student_id})正在学习")# 实例化子类stu = Student("王五"18"2026001")# 调用父类的方法stu.introduce()  # 输出:我叫王五,今年18岁# 调用子类的方法stu.study()      # 输出:学生王五(学号:2026001)正在学习

3. 基础多态:同一方法的不同表现

基础多态的核心是“子类重写父类的方法”,当调用同一个方法时,不同的实例(父类、子类)会表现出不同的行为。
基础示例:
class Animal:    def speak(self):        print("动物发出叫声")class Dog(Animal):    # 重写父类的speak方法    def speak(self):        print("汪汪汪")class Cat(Animal):    # 重写父类的speak方法    def speak(self):        print("喵喵喵")# 定义一个统一的调用函数def animal_speak(animal):    animal.speak()# 传入不同实例,调用同一个方法,表现不同行为animal_speak(Animal())  # 输出:动物发出叫声animal_speak(Dog())     # 输出:汪汪汪animal_speak(Cat())     # 输出:喵喵喵
基础总结:掌握「类的定义与实例化」「类属性与实例属性」「基础继承与重写」「基础多态」,就完成了面向对象的入门,接下来我们进入进阶内容,把这些基础用法变得更规范、更灵活。

二、基础回顾:面向对象的核心三要素(快速唤醒记忆)

在进入进阶内容前,先快速回顾面向对象的核心三要素,为后续进阶内容铺垫——这是理解高级特性的前提,缺一不可。
  • 封装:将数据(属性)和操作数据的方法捆绑在一起,隐藏内部实现细节,只对外暴露接口(比如通过getter/setter方法操作属性),提高代码安全性。
  • 继承:子类继承父类的属性和方法,同时可以重写父类方法、添加自身特有属性/方法,实现代码复用。
  • 多态:同一方法调用,因对象不同而表现出不同的行为(比如子类重写父类方法后,调用同一方法会执行子类逻辑)。
基础用法这里不展开赘述,重点来看:如何将这三要素用得“更高级”,以及Python独有的面向对象高级特性。

三、类的进阶用法:从“会用”到“好用”

基础的类定义和实例化,只能满足简单场景。当项目复杂度提升,就需要用到以下进阶技巧,让类的设计更合理、代码更简洁。

(一)封装的进阶:私有属性、property装饰器与私有化优化

Python中没有真正的“私有属性”(不像Java有private关键字),但可以通过命名规范和property装饰器,实现类似私有属性的封装效果,同时兼顾灵活性。

1. 私有属性的命名规范

Python约定:
  • 单下划线开头(_attr):表示“私有”属性,提醒开发者不要直接访问(但实际上可以直接访问,属于“约定俗成”的私有)。
  • 双下划线开头(__attr):会触发Python的“名称修饰”(name mangling),将属性名改为“_类名__attr”,无法直接通过实例.__attr访问,只能通过类内部方法访问,实现真正的私有化。
示例代码:
class Person:    def __init__(self, name, age):        self._name = name  # 约定私有属性,不建议直接访问        self.__age = age   # 真正的私有属性,触发名称修饰    # 访问私有属性的接口方法    def get_age(self):        return self.__age    def set_age(self, age):        if 0 < age < 120:  # 增加数据校验            self.__age = age        else:            raise ValueError("年龄必须在0-120之间")p = Person("张三"25)print(p._name)  # 可以访问,但不推荐(违反约定)# print(p.__age)  # 报错:AttributeError: 'Person' object has no attribute '__age'print(p.get_age())  # 正确访问方式:通过接口方法p.set_age(30)print(p.get_age())

2. property装饰器:替代getter/setter,简化接口

上面的get_age、set_age方法虽然实现了封装,但调用时需要写括号(p.get_age()),不够简洁。property装饰器可以将方法“伪装”成属性,调用时无需括号,同时保留数据校验逻辑
示例代码(优化上面的Person类):
class Person:    def __init__(self, name, age):        self._name = name        self._age = age  # 这里用单下划线,配合property实现封装    @property    def age(self):  # 替代getter方法,调用时:p.age        return self._age    @age.setter    def age(self, age):  # 替代setter方法,赋值时:p.age = 30        if 0 < age < 120:            self._age = age        else:            raise ValueError("年龄必须在0-120之间")    @property    def name(self):  # 只读属性(没有setter),无法赋值        return self._namep = Person("张三"25)print(p.age)  # 调用getter,无需括号,输出25p.age = 30    # 调用setter,赋值# p.name = "李四"  # 报错:AttributeError: can't set attribute 'name'(只读属性)
核心优势:既保留了封装的安全性(数据校验),又简化了调用方式,让代码更优雅。

(二)继承的进阶:多重继承、方法解析顺序(MRO)与super()

基础继承是“单继承”(子类只继承一个父类),但实际开发中,经常需要一个子类继承多个父类(多重继承),这就会涉及到方法冲突、继承顺序等问题,也是进阶的重点。

1. 多重继承的语法与问题

Python支持多重继承,语法:class 子类(父类1, 父类2, ...): ...
但多重继承容易出现“菱形继承”(钻石继承)问题:子类继承的多个父类,又继承自同一个祖父类,此时调用祖父类的方法,会出现歧义(不知道调用哪个父类的方法)。
示例(菱形继承):
class A:    def show(self):        print("A的show方法")class B(A):    def show(self):        print("B的show方法")class C(A):    def show(self):        print("C的show方法")class D(B, C):  # 多重继承,B和C都继承自A    passd = D()d.show()  # 输出什么?B的show方法还是C的show方法?
答案是:输出“B的show方法”。这就涉及到Python的“方法解析顺序(MRO)”。

2. 方法解析顺序(MRO):解决多重继承的方法冲突

MRO(Method Resolution Order)是Python用于解决多重继承中方法调用顺序的规则,核心是“C3线性化算法”,简单来说:
  • 子类优先于父类。
  • 同一层级的父类,按子类继承时的顺序排列(比如D(B, C),B在前,C在后)。
  • 祖父类最后被调用(避免重复调用)。
可以通过“子类.__mro__”查看MRO顺序:
print(D.__mro__)# 输出:(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)# 调用顺序:D → B → C → A → object
所以上面的d.show(),会优先调用B的show方法,因为B在MRO顺序中比C靠前。

3. super()函数:优雅调用父类方法

在子类中调用父类方法,很多人会直接用“父类名.方法名(self, ...)”,但这种方式在多重继承中会出现问题(比如重复调用祖父类方法)。super()函数可以自动遵循MRO顺序,调用当前类的下一个父类方法,避免手动指定父类名的弊端。
示例(用super()优化多重继承):
class A:    def show(self):        print("A的show方法")class B(A):    def show(self):        super().show()  # 调用MRO顺序中B的下一个父类(A)的show方法        print("B的show方法")class C(A):    def show(self):        super().show()  # 调用MRO顺序中C的下一个父类(A)的show方法        print("C的show方法")class D(B, C):    def show(self):        super().show()  # 调用MRO顺序中D的下一个父类(B)的show方法        print("D的show方法")d = D()d.show()# 输出顺序:# A的show方法# C的show方法# B的show方法# D的show方法
核心作用:super()无需手动指定父类名,自动适配MRO顺序,避免多重继承中的方法调用混乱,尤其适合复杂的继承结构。

(三)多态的进阶:鸭子类型与抽象基类(ABC)

Python的多态和Java、C++不同——它不要求子类必须继承自某个父类(无强制类型约束),而是遵循“鸭子类型”:只要一个对象具有某种方法/属性,就可以被当作该类型的对象使用,无需显式继承。

1. 鸭子类型(Duck Typing)

经典表述:“如果一只鸟走起来像鸭子、游起来像鸭子、叫起来像鸭子,那么它就是鸭子”。在Python中,多态的实现完全依赖鸭子类型。
示例:
class Dog:    def bark(self):        print("汪汪汪")class Cat:    def bark(self):  # 猫也有bark方法,虽然逻辑不同        print("喵喵喵")class Duck:    def bark(self):  # 鸭子也有bark方法        print("嘎嘎嘎")# 统一调用方法,不关心对象具体类型def animal_bark(animal):    animal.bark()# 传入不同类型的对象,表现出不同行为(多态)animal_bark(Dog())  # 汪汪汪animal_bark(Cat())  # 喵喵喵animal_bark(Duck()) # 嘎嘎嘎
优势:灵活性极高,无需定义父类,只要对象满足“接口”(拥有指定方法/属性),就可以被使用,降低代码耦合度。

2. 抽象基类(ABC):约束子类必须实现指定方法

鸭子类型虽然灵活,但也有缺点:如果子类忘记实现必要的方法,只有在运行时才会报错,不利于代码调试和规范。此时可以用“抽象基类(ABC)”,强制子类必须实现指定的抽象方法,提前暴露错误。
实现方式:通过abc模块的ABCMeta元类和abstractmethod装饰器。
示例:
from abc import ABCMeta, abstractmethod# 抽象基类,不能被实例化class Animal(metaclass=ABCMeta):    @abstractmethod  # 抽象方法,子类必须实现    def bark(self):        passclass Dog(Animal):    def bark(self):  # 必须实现bark方法,否则报错        print("汪汪汪")class Cat(Animal):    # 忘记实现bark方法,会报错    pass# dog = Dog()  # 正常实例化# cat = Cat()  # 报错:TypeError: Can't instantiate abstract class Cat with abstract method bark
核心作用:规范子类的接口,强制子类实现必要的方法,适用于大型项目,提高代码的可维护性和规范性。

四、类的高级特性:突破基础,解锁Python面向对象的上限

掌握上面的进阶用法,已经能应对大部分开发场景。但如果想写出更灵活、更强大的代码,还需要掌握以下高级特性——这些特性是Python面向对象的“精髓”,也是区分初级和高级开发者的关键。

(一)元类(Metaclass):类的“类”

我们知道,类是用来创建实例的,而元类是用来创建“类”的——元类是类的“模板”,所有的类(包括object类)都是由元类创建的。Python中默认的元类是type,我们也可以自定义元类,控制类的创建过程。

1. 理解元类:type的两种用法

type有两种常用用法:
  • 用法1:判断对象的类型(基础用法),比如type(1) → <class 'int'> 
  • 用法2:创建类(元类的用法),语法:type(类名, 父类元组, 类属性字典)。
示例:用type创建类(等价于class定义)
# 用class定义类class Person:    species = "人类"    def say_hello(self):        print("Hello")# 用type创建类,和上面等价def say_hello(self):    print("Hello")Person = type("Person", (object,), {"species""人类""say_hello": say_hello})p = Person()print(p.species)  # 人类p.say_hello()     # Hello
这说明:我们平时用class定义类,本质上是Python底层调用type元类,帮我们创建了类。

2. 自定义元类:控制类的创建

自定义元类需要继承type,并重写__new__方法(负责创建类)或__init__方法(负责初始化类),从而实现对类创建过程的控制(比如强制类名大写、添加统一属性等)。
示例:自定义元类,强制所有子类名必须大写
class UpperMeta(type):    # __new__:创建类的方法,cls是要创建的类,name是类名,bases是父类元组,attrs是类属性    def __new__(cls, name, bases, attrs):        # 强制类名大写        if not name.isupper():            raise ValueError("类名必须大写!")        # 给类添加一个统一的属性        attrs["create_time"] = "2026-03-16"        return super().__new__(cls, name, bases, attrs)# 用自定义元类创建类,指定metaclass=UpperMetaclass PERSON(metaclass=UpperMeta):    passclass student(metaclass=UpperMeta):  # 类名小写,报错    pass# 报错:ValueError: 类名必须大写!# p = PERSON()# print(p.create_time)  # 2026-03-16(元类添加的统一属性)
应用场景:元类适合用于框架开发(比如Django的ORM),可以统一控制类的行为,减少重复代码。对于普通开发,元类使用频率不高,但必须理解其原理。

(二)描述符(Descriptor):控制属性的访问

描述符是实现了__get__、__set__、__delete__三个方法中至少一个的类,它可以被用作另一个类的属性,从而控制该属性的访问、赋值、删除行为。property装饰器的底层,就是通过描述符实现的。

1. 描述符的三个核心方法

  • __get__(self, instance, owner):当访问属性时调用,返回属性值。instance是拥有该属性的实例,owner是实例所属的类。
  • __set__(self, instance, value):当给属性赋值时调用,用于校验和设置值。
  • __delete__(self, instance):当删除属性时调用。
示例:自定义描述符,实现属性的类型校验
class IntDescriptor:    # 初始化时,指定属性名    def __init__(self, name):        self.name = name    # 访问属性时调用    def __get__(self, instance, owner):        return instance.__dict__[self.name]  # 从实例的字典中获取值    # 赋值时调用,校验类型    def __set__(self, instance, value):        if not isinstance(value, int):            raise TypeError(f"{self.name}必须是整数类型!")        instance.__dict__[self.name] = value  # 将值存入实例的字典    # 删除属性时调用    def __delete__(self, instance):        del instance.__dict__[self.name]# 使用描述符作为类的属性class Student:    # 用IntDescriptor控制age和score属性,必须是整数    age = IntDescriptor("age")    score = IntDescriptor("score")    def __init__(self, name, age, score):        self.name = name        self.age = age        self.score = scores = Student("李四"2090)print(s.age)  # 20(调用__get__)s.age = 21    # 调用__set__,正常赋值# s.age = "22"  # 报错:TypeError: age必须是整数类型!# del s.age     # 调用__delete__,删除age属性
核心优势:描述符可以将属性的校验、访问逻辑封装起来,实现代码复用。比如多个类的属性需要相同的校验逻辑,只需定义一个描述符,直接复用即可。

(三)类装饰器:增强类的功能

装饰器不仅可以装饰函数,也可以装饰类——类装饰器可以在不修改类定义的前提下,动态增强类的功能(比如添加属性、方法,修改类的行为),本质上是一个接收类作为参数,并返回新类的函数。
示例1:给类添加统一的日志方法
def log_decorator(cls):    # 定义一个新的方法,用于日志输出    def log(self, message):        print(f"[{cls.__name__}] 日志:{message}")    # 给原类添加log方法    cls.log = log    # 返回增强后的类    return cls# 用装饰器装饰类@log_decoratorclass Person:    def __init__(self, name):        self.name = namep = Person("张三")p.log("用户登录成功")  # 输出:[Person] 日志:用户登录成功
示例2:修改类的属性,实现权限控制
def permission_decorator(permission):    # 装饰器工厂,接收权限参数    def decorator(cls):        # 给类添加权限属性        cls.permission = permission        # 重写__init__方法,添加权限校验        original_init = cls.__init__        def new_init(self, *args, **kwargs):            original_init(self, *args, **kwargs)            print(f"当前类权限:{self.permission}")        cls.__init__ = new_init        return cls    return decorator# 给不同的类添加不同的权限@permission_decorator("admin")class Admin:    pass@permission_decorator("user")class User:    passadmin = Admin()  # 输出:当前类权限:adminuser = User()    # 输出:当前类权限:user
应用场景:类装饰器适合用于批量增强类的功能,比如日志记录、权限控制、缓存等,无需修改每个类的定义,提高代码复用率。

(四)其他高级特性:slots、上下文管理器与类方法

1. __slots__:限制实例的属性,提升性能

Python中,每个实例都有一个__dict__属性,用于存储实例的属性,这会占用一定的内存。如果一个类的实例数量很多(比如10万+),可以用__slots__限制实例只能拥有指定的属性,从而节省内存、提升访问速度。
示例:
class Person:    __slots__ = ("name""age")  # 限制实例只能有name和age两个属性p = Person()p.name = "张三"p.age = 25# p.gender = "男"  # 报错:AttributeError: 'Person' object has no attribute 'gender'# 注意:定义__slots__后,实例不再有__dict__属性# print(p.__dict__)  # 报错:AttributeError: 'Person' object has no attribute '__dict__'

2. 类方法(@classmethod)与静态方法(@staticmethod)

除了实例方法(第一个参数是self),Python还有两种特殊的方法:
  • 类方法(@classmethod):第一个参数是cls(代表类本身),可以访问和修改类属性,无需创建实例即可调用(类名.方法名())。
  • 静态方法(@staticmethod):没有默认参数(既没有self,也没有cls),和类、实例无关,相当于一个“独立函数”,只是放在类里面便于管理。
示例:
class MathUtils:    PI = 3.1415926  # 类属性    @classmethod    def circle_area(cls, radius):  # 类方法,操作类属性PI        return cls.PI * radius ** 2    @staticmethod    def add(a, b):  # 静态方法,和类、实例无关        return a + b# 类方法:无需创建实例,直接用类名调用print(MathUtils.circle_area(2))  # 12.5663704# 静态方法:无需创建实例,直接用类名调用print(MathUtils.add(1020))     # 30# 实例也可以调用类方法和静态方法,但不推荐mu = MathUtils()print(mu.circle_area(3))  # 28.2743334

五、进阶实战:综合运用高级特性,写一个可复用的类

下面结合上面的进阶和高级特性,写一个“学生管理类”,综合运用封装、property、描述符、类装饰器等知识点,实现可复用、高扩展性的代码。
from abc import ABCMeta, abstractmethod# 1. 自定义描述符:校验整数类型class IntDescriptor:    def __init__(self, name):        self.name = name    def __get__(self, instance, owner):        return instance.__dict__[self.name]    def __set__(self, instance, value):        if not isinstance(value, intor value < 0:            raise ValueError(f"{self.name}必须是非负整数!")        instance.__dict__[self.name] = value    def __delete__(self, instance):        del instance.__dict__[self.name]# 2. 类装饰器:添加日志功能def log_decorator(cls):    def log(self, message):        print(f"[{cls.__name__}{message}")    cls.log = log    return cls# 3. 抽象基类:约束子类必须实现show_info方法class BaseStudent(metaclass=ABCMeta):    @abstractmethod    def show_info(self):        pass# 4. 学生类:综合运用上述特性@log_decoratorclass Student(BaseStudent):    # 用描述符控制属性    age = IntDescriptor("age")    score = IntDescriptor("score")    def __init__(self, name, age, score):        self.name = name        self.age = age        self.score = score        self.log(f"学生{name}创建成功")    # property装饰器:只读属性(姓名不能修改)    @property    def name(self):        return self._name    @name.setter    def name(self, value):        if not isinstance(value, stror len(value) == 0:            raise ValueError("姓名必须是非空字符串!")        self._name = value    # 实现抽象方法    def show_info(self):        print(f"姓名:{self.name},年龄:{self.age},成绩:{self.score}")# 测试代码try:    s1 = Student("张三"2095)    s1.show_info()  # 姓名:张三,年龄:20,成绩:95    s1.age = 21     # 正常赋值    # s1.age = -1    # 报错:ValueError: age必须是是非负整数!    # s1.name = ""   # 报错:ValueError: 姓名必须是是非空字符串!    s1.log("修改年龄为21")except ValueError as e:    print(e)
这个案例中,我们综合运用了描述符(属性校验)、类装饰器(日志)、抽象基类(接口约束)、property(封装)等特性,实现了一个功能完善、规范、可复用的学生类,体现了Python面向对象高级用法的优势。

六、总结:从基础到高级的学习路径

Python面向对象的学习,是一个“从基础到进阶,再到高级”的循序渐进的过程,建议按以下路径学习,避免跳跃式学习导致的理解模糊:
  1. 夯实基础:掌握类的定义、实例化、类属性与实例属性、基础实例方法,理解面向对象三要素的基础用法。
  2. 进阶提升:吃透封装(property、私有属性)、继承(多重继承、MRO、super())、多态(鸭子类型、抽象基类),让代码更规范、更灵活。
  3. 高级突破:理解并运用元类、描述符、类装饰器、__slots__等高级特性,结合实战场景灵活运用,突破代码上限。
最后需要注意:高级特性不是“越多越好”,而是要根据场景选择合适的用法——比如普通项目中,很少用到元类,但描述符和类装饰器可以大幅提升代码质量。
希望本文能帮你理清Python面向对象的进阶和高级知识点,真正做到“吃透类、用好面向对象”,写出更优雅、更高效的Python代码。
收藏本文,反复研读,结合实战练习,你一定能突破面向对象的瓶颈,实现Python技能的进阶!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 09:55:38 HTTP/2.0 GET : https://f.mffb.com.cn/a/480851.html
  2. 运行时间 : 0.107723s [ 吞吐率:9.28req/s ] 内存消耗:4,720.06kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=957abef63b9fffe699109add960aef17
  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.000453s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000945s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000345s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000313s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000671s ]
  6. SELECT * FROM `set` [ RunTime:0.000256s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000594s ]
  8. SELECT * FROM `article` WHERE `id` = 480851 LIMIT 1 [ RunTime:0.002093s ]
  9. UPDATE `article` SET `lasttime` = 1774576538 WHERE `id` = 480851 [ RunTime:0.009419s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000312s ]
  11. SELECT * FROM `article` WHERE `id` < 480851 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000487s ]
  12. SELECT * FROM `article` WHERE `id` > 480851 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000406s ]
  13. SELECT * FROM `article` WHERE `id` < 480851 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002223s ]
  14. SELECT * FROM `article` WHERE `id` < 480851 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000710s ]
  15. SELECT * FROM `article` WHERE `id` < 480851 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000799s ]
0.109268s