You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Admin子类show_privileges函数运行原理及调用逻辑疑问

Admin类show_privileges方法工作逻辑解析

核心误解点:为什么看起来像调用自身?

两个show_privileges属于完全不同的类实例,只是恰好方法名相同,不存在递归调用的问题。

具体工作机制和调用逻辑

我们按照代码执行顺序拆解:

  1. Admin实例初始化阶段
    创建Admin实例时,__init__方法除了调用父类User的构造逻辑赋值姓名等属性,还会把传入的权限列表实例化为Privileges类的对象,赋值给Admin实例的privileges属性。
    也就是说:admin_1.privileges本质是Privileges类的实例,不是Admin类自身的属性。
  2. show_privileges方法调用阶段
    当你执行admin_1.show_privileges()时:
    • 首先执行Admin类定义的show_privileges方法
    • 方法内执行self.privileges.show_privileges():这里.前面的调用主体是self.privileges(也就是Privileges类的实例),所以实际调用的是Privileges类里定义的show_privileges方法,和Admin自己的show_privileges没有关系
    • 最终Privileges类的show_privileges方法会遍历存储的权限列表,逐行打印权限内容

验证逻辑

如果你把Admin类的show_privileges改成self.show_privileges(),才会出现自己调用自己的无限递归报错,当前代码的调用主体完全不同,不会触发递归。

内容的提问来源于stack exchange,提问作者Alfie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:36:04