当前位置:首页>python>Python 面向对象习题(十)

Python 面向对象习题(十)

  • 2026-08-25 06:39:51
Python 面向对象习题(十)

本文首发于微信公众号「拙见python」,基础板块第13 篇。适合人群:已阅读第 2 篇:Python 面向对象编程并动手敲过代码的读者。题目难度:⭐ → ⭐⭐⭐⭐⭐ 逐步提升,建议先自己写,再看答案。


做题须知

  • 每道题标注了考察知识点和难度星级
  • 先自己写,写不出来再看答案
  • 答案不是唯一的,能跑通且逻辑正确就行
  • 每道题答案下方附有思路解析

第 10 题:综合实战——银行账户系统 ⭐⭐⭐⭐⭐

考察知识点全部 OOP 知识点综合——封装、继承、多态、@property、魔术方法、@dataclass、类方法、异常处理、设计原则

设计一个银行账户系统:

基类 BankAccount

  1. 私有属性 __balance(余额)、受保护属性 _account_number、公开属性 owner

  2. @property 暴露 balance(只读)

  3. deposit(amount) 存款(金额必须 >0)

  4. withdraw(amount) 取款(金额必须 >0 且 ≤ 余额)

  5. transfer(target, amount) 转账到另一个账户

  6. __str__ 和 __repr__

  7. __add__ 实现账户合并(余额相加,返回新账户)

  8. 类属性 total_accounts 记录总账户数,类方法 get_total() 查询

  9. 自定义异常 InsufficientFundsErrorInvalidAmountError

子类 SavingsAccount(储蓄账户)

  • 新增 interest_rate(利率)属性

  • 新增 apply_interest() 方法计算并存入利息

  • 重写 withdraw():每次取款额外收 1 元手续费

子类 CreditAccount(信用账户)

  • 新增 credit_limit(信用额度)属性

  • 重写 withdraw():允许透支到信用额度

  • 新增 available_credit() 方法返回可用额度

Bank 类(银行)

  • 管理所有账户(字典 account_number → BankAccount

  • open_account(...) 开户

  • get_account(number) 查询账户

  • __len____contains____str__

参考答案:

from dataclasses import dataclassfrom typing import OptionalDict# ========== 自定义异常 ==========class InvalidAmountError(Exception):    ”””金额无效异常”””    passclass InsufficientFundsError(Exception):    ”””余额不足异常”””    pass# ========== 基类:银行账户 ==========class BankAccount:    total_accounts = 0# 类属性:总账户数    def __init__(self, owner: str, account_number: str, balance: float = 0):        self.owner = owner        self._account_number = account_number        self.__balance = balance        BankAccount.total_accounts += 1# -------- @property:只读余额 --------    @property    def balance(self):        return self.__balance    @property    def account_number(self):        return self._account_number# -------- 存取款 --------    def deposit(self, amount: float):        if amount <= 0:            raise InvalidAmountError(f”存款金额必须大于 0,收到 {amount}”)        self.__balance += amount        return self.__balance    def withdraw(self, amount: float):        if amount <= 0:            raise InvalidAmountError(f”取款金额必须大于 0,收到 {amount}”)        if amount > self.__balance:            raise InsufficientFundsError(                f”余额不足:余额 {self.__balance},尝试取 {amount}”            )        self.__balance -= amount        return self.__balance# -------- 转账 --------    def transfer(self, target: 'BankAccount', amount: float):        ”””转账:从当前账户扣款,存入目标账户”””        self.withdraw(amount)# 可能抛 InsufficientFundsError        target.deposit(amount)        return f”{self.owner} → {target.owner}:¥{amount:.2f}”# -------- 魔术方法 --------    def __str__(self):        return f”账户[{self._account_number}] {self.owner} 余额:¥{self.__balance:.2f}”    def __repr__(self):        return f”BankAccount(owner={self.owner!r}, account_number={self._account_number!r}, balance={self.__balance})”    def __add__(self, other):        ”””合并账户:余额相加,生成新账户”””        new_number = f”{self._account_number}+{other._account_number}”        return BankAccount(f”{self.owner}&{other.owner}”, new_number, self.__balance + other.__balance)    def __eq__(self, other):        return self._account_number == other._account_number# -------- 类方法 --------    @classmethod    def get_total(cls):        return cls.total_accounts# ========== 子类:储蓄账户 ==========class SavingsAccount(BankAccount):    def __init__(self, owner, account_number, balance=0, interest_rate=0.03):        super().__init__(owner, account_number, balance)        self.interest_rate = interest_rate    def apply_interest(self):        ”””计算并存入利息”””        interest = self.balance * self.interest_rate        self.deposit(interest)        return interest    def withdraw(self, amount: float):        ”””重写:每次取款额外收 1 元手续费”””        total = amount + 1# 本金 + 手续费        if total > self.balance:            raise InsufficientFundsError(                f”余额不足(含手续费):需 {total},余额 {self.balance}”            )# 直接操作私有余额不可行(__balance 是名称重整的)# 所以先取本金+手续费,再单独扣除手续费        super().withdraw(total)        return self.balance    def __str__(self):        return f”储蓄账户[{self.account_number}] {self.owner} 余额:¥{self.balance:.2f}(利率{self.interest_rate:.1%})”# ========== 子类:信用账户 ========== class CreditAccount(BankAccount):    def __init__(self, owner, account_number, balance=0, credit_limit=5000):        super().__init__(owner, account_number, balance)        self.credit_limit = credit_limit    def withdraw(self, amount: float):        ”””重写:允许透支到信用额度”””        if amount <= 0:            raise InvalidAmountError(f”取款金额必须大于 0”)# 可用 = 余额 + 信用额度        available = self.balance + self.credit_limit        if amount > available:            raise InsufficientFundsError(                f”超出信用额度:可用 {available},尝试取 {amount}”            )# 直接调用父类 deposit/withdraw 无法透支,需特殊处理# 透支时余额变负        self._BankAccount__balance -= amount# 通过名称重整访问私有属性        return self.balance    def available_credit(self):        ”””可用额度 = 余额 + 信用额度”””        return self.balance + self.credit_limit    def __str__(self):        return f”信用账户[{self.account_number}] {self.owner} 余额:¥{self.balance:.2f}(额度{self.credit_limit})”# ========== Bank 类 ==========class Bank:    def __init__(self, name: str):        self.name = name        self._accounts: Dict[str, BankAccount] = {}    def open_account(self, account: BankAccount):        ”””开户”””        number = account.account_number        if number in self._accounts:            print(f”⚠️ 账号 {number} 已存在”)            return None        self._accounts[number] = account        print(f”🏦 {self.name} 开户成功:{account}”)        return account    def get_account(self, account_number: str) -> Optional[BankAccount]:        ”””查询账户”””        return self._accounts.get(account_number)    def all_balances(self):        ”””所有账户余额汇总”””        return sum(acc.balance for acc in self._accounts.values())    def __len__(self):        return len(self._accounts)    def __contains__(self, account_number: str):        return account_number in self._accounts    def __str__(self):        return f”{self.name}({len(self)} 个账户,总存款 ¥{self.all_balances():.2f})”# ========== 测试 ==========def main():    print(”=” * 55)    print(”  拙见python 银行账户系统演示”)    print(”=” * 55)    bank = Bank(”拙见银行”)# 开户    acc1 = SavingsAccount(”张三”, ”SA001”, 10000, interest_rate=0.035)    acc2 = CreditAccount(”李四”, ”CA001”, 2000, credit_limit=5000)    acc3 = BankAccount(”王五”, ”BA001”, 5000)    bank.open_account(acc1)    bank.open_account(acc2)    bank.open_account(acc3)    print(f”\n总账户数:{BankAccount.get_total()}”)# 存取款    print(”\n--- 存取款测试 ---”)    acc1.deposit(5000)    print(f”张三存款 5000 后:¥{acc1.balance:.2f}”)    acc3.withdraw(1000)    print(f”王五取款 1000 后:¥{acc3.balance:.2f}”)# 储蓄账户取款(含手续费)    acc1.withdraw(1000)    print(f”张三取款 1000(含1元手续费)后:¥{acc1.balance:.2f}”)# 信用账户透支    print(”\n--- 信用账户透支测试 ---”)    acc2.withdraw(6000)# 余额 2000 + 额度 5000 = 7000,可以取 6000    print(f”李四透支取款 6000 后:¥{acc2.balance:.2f}”)    print(f”李四可用额度:¥{acc2.available_credit():.2f}”)# 透支超限    try:        acc2.withdraw(5000)    except InsufficientFundsError as e:        print(f”❌ {e}”)# 利息    print(”\n--- 利息测试 ---”)    interest = acc1.apply_interest()    print(f”张三利息到账:¥{interest:.2f},新余额:¥{acc1.balance:.2f}”)# 转账    print(”\n--- 转账测试 ---”)    result = acc3.transfer(acc1, 500)    print(f”转账结果:{result}”)    print(f”王五余额:¥{acc3.balance:.2f}”)    print(f”张三余额:¥{acc1.balance:.2f}”)# 异常测试    print(”\n--- 异常测试 ---”)    try:        acc3.deposit(-100)    except InvalidAmountError as e:        print(f”❌ {e}”)    try:        acc3.withdraw(99999)    except InsufficientFundsError as e:        print(f”❌ {e}”)# 账户合并    print(”\n--- 账户合并测试 ---”)    merged = acc3 + BankAccount(”赵六”, ”BA002”, 3000)    print(f”合并账户:{merged}”)# 银行汇总    print(”\n--- 银行汇总 ---”)    print(bank)    print(f”账号 SA001 在银行?{'SA001' in bank}”)    print(f”账号 XX999 在银行?{'XX999' in bank}”)# 所有账户    print(”\n--- 所有账户 ---”)    for number, acc in bank._accounts.items():        print(f”  {number}: {acc}”)if __name__ == ”__main__”:    main()

输出结果:

=======================================================  拙见python 银行账户系统演示=======================================================🏦 拙见银行 开户成功:储蓄账户[SA001] 张三 余额:¥10000.00(利率3.5%)🏦 拙见银行 开户成功:信用账户[CA001] 李四 余额:¥2000.00(额度5000)🏦 拙见银行 开户成功:账户[BA001] 王五 余额:¥5000.00总账户数:3--- 存取款测试 ---张三存款 5000 后:¥15000.00王五取款 1000 后:¥4000.00张三取款 1000(含1元手续费)后:¥13999.00--- 信用账户透支测试 ---李四透支取款 6000 后:¥-4000.00李四可用额度:¥1000.00❌ 超出信用额度:可用 1000,尝试取 5000--- 利息测试 ---张三利息到账:¥489.97,新余额:¥14488.97--- 转账测试 ---转账结果:王五 → 张三:¥500.00王五余额:¥3500.00张三余额:¥14988.97--- 异常测试 ---❌ 存款金额必须大于 0,收到 -100❌ 余额不足:余额 3500,尝试取 99999--- 账户合并测试 ---合并账户:账户[BA001+BA002] 王五&赵六 余额:¥6500.00--- 银行汇总 ---拙见银行(3 个账户,总存款 ¥14488.97)账号 SA001 在银行?True账号 XX999 在银行?False--- 所有账户 ---  SA001: 储蓄账户[SA001] 张三 余额:¥14488.97(利率3.5%)  CA001: 信用账户[CA001] 李四 余额:¥-4000.00(额度5000)  BA001: 账户[BA001] 王五 余额:¥3500.00

思路解析:

    这道题是 OOP 系列的综合检验,覆盖了第 2 篇的全部知识点:

知识点
代码体现
类与对象
BankAccount
SavingsAccountCreditAccountBank
类属性 + 类方法
total_accounts
 + get_total() 记录总账户数
封装
__balance
 私有属性,外部只能通过 @property 只读访问
@propertybalance只读、account_number 只读
继承 + super()
SavingsAccount
/CreditAccount 继承 BankAccount
方法重写
两个子类各自重写 withdraw(),实现不同取款逻辑
多态
withdraw()
 在不同子类中有不同行为,调用方无需关心具体类型
魔术方法
__str__
__repr____add__(合并账户)、__eq____len____contains__
自定义异常
InvalidAmountError
InsufficientFundsError
组合优于继承
Bank
 内部持有账户字典,而非继承 BankAccount
名称重整
CreditAccount
 中通过 self._BankAccount__balance 访问父类私有属性

关键设计决策:

  • __balance用双下划线实现名称重整,子类不能直接访问 self.__balance,必须通过 super().withdraw() 或 self._BankAccount__balance(名称重整后的路径)。

  • CreditAccount 允许透支,所以不能直接调用 super().withdraw()(会抛异常),需要直接操作 _BankAccount__balance。

  • transfer() 通过调用 self.withdraw() + target.deposit() 实现——由于多态,如果是 SavingsAccount 转账,会自动走带手续费的 withdraw()。

  • __add__ 实现账户合并,返回新对象,不修改原有账户——不可变操作更安全。

    难度与知识点总结

    题号
    题目
    难度
    核心知识点
    1
    学生信息类
    类定义、__init__self、实例方法
    2
    实例计数器
    ⭐⭐
    类属性 vs 实例属性、@classmethod
    3
    三种方法实战
    ⭐⭐
    实例方法、@classmethod@staticmethod、工厂模式
    4
    带校验的密码类
    ⭐⭐⭐
    封装、私有属性、@property + @setter
    5
    动物王国继承体系
    ⭐⭐⭐
    单继承、super()、方法重写、isinstance()
    6
    多继承与 MRO 分析
    ⭐⭐⭐⭐
    多继承、C3 线性化、super() 在多继承中的行为
    7
    可运算的分数类
    ⭐⭐⭐⭐
    运算符重载、__eq__/__lt____str__/__repr____float__
    8
    Mixin 组合与鸭子类型
    ⭐⭐⭐⭐
    Mixin 模式、多继承组合、鸭子类型、__iter__/__len__
    9
    dataclass 购物车系统
    ⭐⭐⭐⭐⭐
    @dataclass
    field()、组合优于继承、__contains__/__iter__
    10
    银行账户系统
    ⭐⭐⭐⭐⭐
    全部 OOP 知识点综合 + 自定义异常 + 名称重整

    写在最后

        10 道题,从最基础的类定义,到涵盖封装、继承、多态、魔术方法、dataclass 的银行系统,覆盖了第 2 篇面向对象的全部知识点。

    建议的练习方式:

    1. 先自己写——不看答案,能写多少写多少
    2. 卡住了回看文章——第 2 篇对应章节有完整示例
    3. 写完对比答案——思考有没有更 Pythonic 的写法
    4. 尝试扩展——给第 10 题加新功能(如定期账户、贷款账户、交易记录)

    如果你能独立做出第 10 题,说明 Python 面向对象已经过关了。

    关注「拙见python」,一起写干净的代码。


    下一篇预告:Python 模块与包—组织你的代码工程

    最新文章

    随机文章

    基本 文件 流程 错误 SQL 调试
    1. 请求信息 : 2026-08-25 10:49:47 HTTP/2.0 GET : https://f.mffb.com.cn/a/512115.html
    2. 运行时间 : 0.465013s [ 吞吐率:2.15req/s ] 内存消耗:4,688.21kb 文件加载:140
    3. 缓存信息 : 0 reads,0 writes
    4. 会话信息 : SESSION_ID=a809f658d96a32d91e5fc96e643f6809
    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.001044s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
    2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001400s ]
    3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000586s ]
    4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.017874s ]
    5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001325s ]
    6. SELECT * FROM `set` [ RunTime:0.003401s ]
    7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001560s ]
    8. SELECT * FROM `article` WHERE `id` = 512115 LIMIT 1 [ RunTime:0.015593s ]
    9. UPDATE `article` SET `lasttime` = 1787626187 WHERE `id` = 512115 [ RunTime:0.005010s ]
    10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000639s ]
    11. SELECT * FROM `article` WHERE `id` < 512115 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.018950s ]
    12. SELECT * FROM `article` WHERE `id` > 512115 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.026399s ]
    13. SELECT * FROM `article` WHERE `id` < 512115 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.085380s ]
    14. SELECT * FROM `article` WHERE `id` < 512115 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.099958s ]
    15. SELECT * FROM `article` WHERE `id` < 512115 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.034509s ]
    0.468722s