Python子类是否可在类层级扩展继承自父类的列表类属性
问题解答
你想要的效果完全可以实现,但是你示例中直接在子类定义里写permissions += ['CanManage']的写法不可行,会触发NameError报错——因为定义子类的阶段,当前作用域还没有permissions这个变量,没法直接做增量赋值。
最简单的实现方式如下:
class Parent: permissions = ['CanEdit', 'CanCreate'] class Child(Parent): # 显式基于父类的permissions生成新列表赋值给子类的同名属性 permissions = Parent.permissions + ['CanManage']
运行验证效果:
print(Parent.permissions) # 输出:['CanEdit', 'CanCreate'] print(Child.permissions) # 输出:['CanEdit', 'CanCreate', 'CanManage']
这种写法的优势是逻辑清晰无冗余:
- 子类的
permissions是全新生成的列表,不会修改父类的原有属性值 - 属性是类层级的,不需要实例化就能直接调用
如果确实想在子类里用+=的语法简化书写,可以通过元类或者类装饰器封装逻辑实现,不过日常开发场景下上面的显式拼接写法已经完全够用,可读性也更高。
内容的提问来源于stack exchange,提问作者Khels Kelly
相关产品推荐
相关产品推荐

