当前位置:首页>python>每天学习一点Python——面向对象编程(OOP)入门详解

每天学习一点Python——面向对象编程(OOP)入门详解

  • 2026-02-05 00:48:36
每天学习一点Python——面向对象编程(OOP)入门详解

每天学习一点Python——面向对象编程(OOP)入门详解

面向对象编程(OOP)是一种将相关属性和行为打包到单个对象中的编程方法。就像工厂的装配线,每个步骤处理一些材料,最终将原材料转化为成品。

今天我们将通过Python语言,从零开始学习OOP的核心概念:对象属性和方法,以及继承

一、什么是类和对象?

想象你要记录公司员工的信息。如果用列表来表示每个员工:

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]

这样做有几个问题:

  1. 1. 可读性差:如果代码多,你很难记住 kirk[0] 是名字还是年龄。
  2. 2. 容易出错:如果某个员工信息不全(比如mccoy少了年龄),就会导致数据错位。

为了解决这个问题,我们可以使用来定义一种结构化的数据类型。

1.1 定义类

就像一张蓝图,它规定了某个事物应该有哪些属性和行为,但它本身不包含具体数据。
对象是根据类创建的具体实例,包含真实数据。

定义一个最简单的类:

class Dog:
    pass
  • • class 是定义类的关键字。
  • • Dog 是类名,Python约定类名使用大驼峰命名法(每个单词首字母大写)。
  • • pass 是占位符,表示暂时什么都不写,避免语法错误。

1.2 添加属性:__init__ 方法

我们希望每只狗都有名字和年龄,这可以通过 __init__ 方法来实现:

class Dog:
    def
 __init__(self, name, age):
        self
.name = name
        self
.age = age
  • • __init__ 是一个特殊方法,在创建对象时自动调用,用于初始化对象属性。
  • • self 代表实例本身,必须是第一个参数。
  • • self.name = name 表示将传入的 name 赋值给该实例的 .name 属性。

💡 提示self 不是Python关键字,你可以用别的词,但约定俗成用 self,清晰易懂。

1.3 类属性 vs 实例属性

  • • 实例属性:每个对象特有的属性(如每只Dog的名字、年龄)。
  • • 类属性:所有对象共享的属性(如所有Dog都是同一个物种)。
class Dog:
    species = "Canis familiaris"  # 类属性(所有狗共享)

    def
 __init__(self, name, age):
        self
.name = name  # 实例属性(每只狗特有)
        self
.age = age    # 实例属性(每只狗特有)

二、创建对象(实例化)

有了类,我们就可以创建具体的Dog对象了:

buddy = Dog("Buddy", 9)
miles = Dog("Miles", 4)
  • • Dog("Buddy", 9) 调用 __init__ 方法,创建一只名为Buddy、年龄9岁的狗。
  • • 每只Dog都是独立的,内存地址不同:
print(buddy == miles)  # 输出: False

访问属性:

print(buddy.name)  # 输出: Buddy
print
(miles.age)   # 输出: 4
print
(buddy.species)  # 输出: Canis familiaris

三、添加方法

方法是定义在类中的函数,用于描述对象的行为:

class Dog:
    species = "Canis familiaris"

    def
 __init__(self, name, age):
        self
.name = name
        self
.age = age

    def
 description(self):
        return
 f"{self.name} is {self.age} years old"

    def
 speak(self, sound):
        return
 f"{self.name} says {sound}"

使用:

miles = Dog("Miles", 4)
print
(miles.description())  # 输出: Miles is 4 years old
print
(miles.speak("Woof Woof"))  # 输出: Miles says Woof Woof

3.1 为什么description()不用传参,而speak("Woof Woof")需要传参?

这是一个关于Python类方法参数的重要问题。区别在于这两个方法的定义方式不同:

1. description(self) 方法

def description(self):
    return
 f"{self.name} is {self.age} years old"
  • • 只有一个参数self
  • • self 是Python的约定,表示实例本身
  • • 方法内部使用 self.name 和 self.age 访问实例属性
  • • 调用时不需要传入任何参数,因为Python会自动传递 self

2. speak(self, sound) 方法

def speak(self, sound):
    return
 f"{self.name} says {sound}"
  • • 有两个参数self 和 sound
  • • self:自动传递的实例引用
  • • sound:需要用户传入的参数

对比表格:

方法
定义时的参数
调用时的参数
说明
description(self)
只有 self
self
 自动传入,使用实例属性
speak(self, sound)self
 和 sound
"Woof Woof"self
 自动传入,sound 需要手动传入

3.2 美化输出:__str__ 方法

直接打印对象会显示内存地址,不友好:

print(miles)  # 输出: <__main__.Dog object at 0x...>

我们可以定义 __str__ 方法,自定义打印内容:

class Dog:
    # ... 其他代码不变


    def
 __str__(self):
        return
 f"{self.name} is {self.age} years old"

现在再打印:

print(miles)  # 输出: Miles is 4 years old

💡 提示__init____str__ 这类前后带双下划线的方法称为"dunder方法"(double underscores),用于实现类的特殊行为。

3.3 description() 与 __str__() 的区别

def description(self):
    return
 f"{self.name} is {self.age} years old"

def
 __str__(self):
    return
 f"{self.name} is {self.age} years old"

主要区别:

特性
description()__str__()
方法类型
普通方法
特殊方法(魔术方法)
调用方式
需要显式调用
自动调用
用途
自定义描述逻辑
定义对象的"人类可读"字符串表示
示例调用print(miles.description())print(miles)
字符串转换
需要手动调用
str(miles)
 自动使用
在列表/容器中
不会自动调用
在容器中打印时会自动调用

实际使用中的差异:

class Dog:
    def
 __init__(self, name, age):
        self
.name = name
        self
.age = age

    def
 description(self):
        return
 f"{self.name} is {self.age} years old"

    def
 __str__(self):
        return
 f"Dog: {self.name}, Age: {self.age}"

# 创建实例

miles = Dog("Miles", 4)

两种方法的调用对比:

使用 description()

print("=== 使用 description() ===")
print
(miles.description())  # 需要显式调用方法
# 输出: Miles is 4 years old

使用 __str__()

print("\n=== 使用 __str__() ===")
print
(miles)  # 直接打印对象,自动调用 __str__
# 输出: Dog: Miles, Age: 4

更多 __str__ 的优势

print(str(miles))  # 使用 str() 函数
# 输出: Dog: Miles, Age: 4


# 在 f-string 中

print
(f"My dog: {miles}")
# 输出: My dog: Dog: Miles, Age: 4


# 在列表中

dogs = [miles, Dog("Buddy", 2)]
print
(dogs)
# 输出: [Dog: Miles, Age: 4, Dog: Buddy, Age: 2]

为什么需要 __str__

  1. 1. Python惯例和约定
    • • __str__ 是Python的内置协议
    • • 很多Python函数和操作会自动调用__str__
  2. 2. 更自然的使用方式
# 有了 __str__ 后,使用更简洁自然
print
(miles)                    # ✅ 直接打印
print
(f"Info: {miles}")         # ✅ 在f-string中
print
("Dog info: " + str(miles))  # ✅ 字符串拼接

# 没有 __str__ 时,需要更多手动操作

print
(miles.description())      # 🔴 总是要加 .description()

四、继承:创建子类

假设我们想区分不同品种的狗,比如杰克罗素梗、腊肠犬、斗牛犬。它们都是狗,但叫声不同。我们可以通过继承来创建子类:

class JackRussellTerrier(Dog):
    pass


class
 Dachshund(Dog):
    pass


class
 Bulldog(Dog):
    pass
  • • 括号中的 Dog 表示父类。
  • • 子类自动拥有父类的所有属性和方法。

4.1 重写方法

不同品种的狗叫声不同,我们可以在子类中重写 speak 方法:

class JackRussellTerrier(Dog):
    def
 speak(self, sound="Arf"):
        return
 f"{self.name} says {sound}"

现在创建一只JackRussellTerrier:

miles = JackRussellTerrier("Miles", 4)
print
(miles.speak())  # 输出: Miles says Arf
print
(miles.speak("Grrr"))  # 输出: Miles says Grrr

要点总结:

  1. 1. 默认参数sound="Arf" 设置了默认值
  2. 2. 调用方式
miles.speak()          # 使用默认值 → "Arf"
miles.speak("Grrr")    # 使用传入值 → "Grrr"
  1. 3. 原理:如果不传参数,Python自动使用默认值"Arf";如果传参,则覆盖默认值

对比父类:

  • • 父类Dog.speak(self, sound):必须传参
  • • 子类JackRussellTerrier.speak(self, sound="Arf"):可不传(用默认),也可传参覆盖

默认参数让方法调用更灵活。

4.2 使用 super() 调用父类方法

如果希望在子类中保留父类方法的行为,又想做些扩展,可以使用 super()

class JackRussellTerrier(Dog):
    def
 speak(self, sound="Arf"):
        return
 super().speak(sound)

这样,父类 Dog 的 speak 方法被调用,格式保持一致。

两种方式对比:

1. 不用 super()(自己重写):

def speak(self, sound="Arf"):
    return
 f"{self.name} says {sound}"  # 完全自己重写
  • • 效果:得到和父类一样的结果
  • • 问题:如果父类改了(比如改成shouts:),这里不会自动更新

2. 用 super()(复用父类):

def speak(self, sound="Arf"):
    return
 super().speak(sound)  # 调用父类方法
  • • 效果:完全复用父类逻辑
  • • 好处:父类改了,这里自动跟着改

举个例子:

初始情况:

class Dog:
    def
 speak(self, sound):
        return
 f"{self.name} says {sound}"  # 父类版本1

class
 JackRussellTerrier(Dog):
    def
 speak(self, sound="Arf"):
        return
 super().speak(sound)  # 调用父类方法

测试:

dog = JackRussellTerrier("Miles", 4)
print
(dog.speak("汪"))  # 输出: Miles says 汪

父类修改后:

class Dog:
    def
 speak(self, sound):
        # 产品经理要求:所有狗说话都要加表情!

        return
 f"{self.name} says: {sound} 🐶"  # 父类版本2(修改了!)

看看子类的变化:

情况1:用 super() 的子类

dog = JackRussellTerrier("Miles", 4)
print
(dog.speak("汪"))
# 输出: Miles says: 汪 🐶  ← 自动继承父类新格式!

# super() 自动调用新版的 Dog.speak()

情况2:不用 super() 的子类

class BadJackRussellTerrier(Dog):
    def
 speak(self, sound="Arf"):
        # 自己重写的,没用 super()

        return
 f"{self.name} says {sound}"

bad_dog = BadJackRussellTerrier("Miles", 4)
print
(bad_dog.speak("汪"))
# 输出: Miles says 汪  ← 还是旧格式!没有表情!

# 需要手动修改代码才能更新

对比表格:

时间点
父类 Dog.speak()
用 super() 的子类
不用 super() 的子类
初始"{name} says {sound}"Miles says 汪Miles says 汪
父类修改后"{name} says: {sound} 🐶"Miles says: 汪 🐶
 ✅
Miles says 汪
 ❌
需要手动修改吗?
-
不需要
,自动更新
需要
,必须改代码

3. 用 super() 添加功能(最常见用法):

def speak(self, sound="Arf"):
    print
("摇尾巴!")            # 1. 自己加的动作
    result = super().speak(sound) # 2. 父类的核心逻辑
    print
("跳起来!")            # 3. 自己加的动作
    return
 result
  • • 效果:父类逻辑 + 自己新增逻辑

现实类比:

  • • 用 super():大家在我的代码上搭建新功能,我更新基础代码时,大家的扩展会自动升级
  • • 不用 super():大家把我的代码复制一份自己改,我更新时,大家的复制版不会自动更新

总结要点:

  1. 1. super() = 调用父类方法
  2. 2. 主要用途:复用父类代码,避免重复
  3. 3. 常见模式:父类基础功能 + 子类额外功能

4.3 检查对象类型

print(type(miles))  # 输出: <class '__main__.JackRussellTerrier'>
print
(isinstance(miles, Dog))  # 输出: True
print
(isinstance(miles, Bulldog))  # 输出: False
  • • type() 返回对象的类。
  • • isinstance() 检查对象是否属于某个类或其子类。

五、练习巩固

练习1:为Dog类添加颜色属性

class Dog:
    def
 __init__(self, name, age, coat_color):
        self
.name = name
        self
.age = age
        self
.coat_color = coat_color

philo = Dog("Philo", 5, "brown")
print
(f"{philo.name}'s coat is {philo.coat_color}.")

输出:

Philo's coat is brown.

练习2:创建Car类

class Car:
    def
 __init__(self, color, mileage):
        self
.color = color
        self
.mileage = mileage

blue_car = Car("blue", 20000)
red_car = Car("red", 30000)

print
(f"The {blue_car.color} car has {blue_car.mileage:,} miles.")
print
(f"The {red_car.color} car has {red_car.mileage:,} miles.")

输出:

The blue car has 20,000 miles.
The red car has 30,000 miles.

练习3:为Car类添加行驶方法

class Car:
    def
 __init__(self, color, mileage):
        self
.color = color
        self
.mileage = mileage

    def
 drive(self, miles):
        self
.mileage += miles

my_car = Car("white", 0)
my_car.drive(100)
print
(my_car.mileage)  # 输出: 100

六、总结

今天我们学习了:

  1. 1. 类和对象:类是蓝图,对象是实例
  2. 2. 属性:实例属性(每对象特有)和类属性(所有对象共享)
  3. 3. 方法:定义对象的行为,self 参数自动传递
  4. 4. 特殊方法__init__(初始化)、__str__(字符串表示)
  5. 5. 继承:子类继承父类特性,可重写或扩展方法
  6. 6. super():调用父类方法,提高代码复用性和维护性

请记住:面向对象编程的核心思想是将数据和操作数据的方法封装在一起,让代码更加模块化、可复用、易维护。


📦 资源获取提示

关注「码农自习室」,后台回复关键词 Python学习,即可获取本文完整代码,一起动手掌握高效编程的核心技巧!


❤️ 支持我们

如果觉得本文对你有帮助,欢迎点赞 + 关注,您的支持是我们持续创作优质内容的最大动力!


📚 学习资源说明

本文内容是基于《Python Basics: A Practical Introduction to Python 3》(Real Python)一书的学习笔记整理。
这本书是一本非常优秀的Python入门教材,推荐给所有想要系统学习Python的朋友们。

这本书的特点:

  • • ✅ 完全面向编程新手
  • • ✅ 每个概念都有代码示例
  • • ✅ 包含大量练习题
  • • ✅ 由经验丰富的Python开发者编写

跟着这本书学习,配合我的笔记整理,相信你能更快掌握Python编程!

让我们一起坚持学习,每天进步一点点!💪

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-07 23:26:39 HTTP/2.0 GET : https://f.mffb.com.cn/a/471909.html
  2. 运行时间 : 0.359995s [ 吞吐率:2.78req/s ] 内存消耗:4,612.08kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=34c6b47f38b205698ef3bf2ec19afd4b
  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.000545s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000798s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.023104s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.023450s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000888s ]
  6. SELECT * FROM `set` [ RunTime:0.047951s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000809s ]
  8. SELECT * FROM `article` WHERE `id` = 471909 LIMIT 1 [ RunTime:0.000697s ]
  9. UPDATE `article` SET `lasttime` = 1770478000 WHERE `id` = 471909 [ RunTime:0.001851s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000625s ]
  11. SELECT * FROM `article` WHERE `id` < 471909 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000680s ]
  12. SELECT * FROM `article` WHERE `id` > 471909 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.022927s ]
  13. SELECT * FROM `article` WHERE `id` < 471909 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.058313s ]
  14. SELECT * FROM `article` WHERE `id` < 471909 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.067779s ]
  15. SELECT * FROM `article` WHERE `id` < 471909 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.039433s ]
0.361663s