Python Admin子类show_privileges函数运行原理及调用逻辑疑问
Admin类show_privileges方法工作逻辑解析
核心误解点:为什么看起来像调用自身?
两个show_privileges属于完全不同的类实例,只是恰好方法名相同,不存在递归调用的问题。
具体工作机制和调用逻辑
我们按照代码执行顺序拆解:
- Admin实例初始化阶段
创建Admin实例时,__init__方法除了调用父类User的构造逻辑赋值姓名等属性,还会把传入的权限列表实例化为Privileges类的对象,赋值给Admin实例的privileges属性。
也就是说:admin_1.privileges本质是Privileges类的实例,不是Admin类自身的属性。 - 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类定义的
验证逻辑
如果你把Admin类的show_privileges改成self.show_privileges(),才会出现自己调用自己的无限递归报错,当前代码的调用主体完全不同,不会触发递归。
内容的提问来源于stack exchange,提问作者Alfie
相关产品推荐
相关产品推荐

