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

如何定义嵌套类常量?Python权限常量定义优化咨询

嘿,从Java转Python后想沿用嵌套类组织常量的思路完全没问题!Python里有好几种方式能实现类似的结构化常量管理,我给你分享几个最实用的方案:

1. 纯嵌套类实现(最贴近Java写法)

这是最直接对应你Java习惯的方式,直接用类嵌套来分组常量:

class Permission:
    class User:
        ADD = 'add_user'
        VIEW = 'view_user'
        EDIT = 'edit_user'
    
    class Tool:
        ADD = 'add_tool'
        VIEW = 'view_tool'
        EDIT = 'edit_tool'

使用起来和Java几乎一模一样:

print(Permission.User.ADD)  # 输出 'add_user'
print(Permission.Tool.VIEW) # 输出 'view_tool'

这种方式简单易懂,不需要引入额外模块,完全满足你“新增常量时不用写重复前缀”的需求。

2. 嵌套枚举类(更Pythonic的常量管理)

如果你想让常量具备枚举的特性(比如避免拼写错误、支持迭代成员等),可以用Python的enum模块,尤其是3.11+支持的StrEnum,直接返回字符串值,非常方便:

from enum import StrEnum

class Permission:
    class User(StrEnum):
        ADD = 'add_user'
        VIEW = 'view_user'
        EDIT = 'edit_user'
    
    class Tool(StrEnum):
        ADD = 'add_tool'
        VIEW = 'view_tool'
        EDIT = 'edit_tool'

使用时直接调用枚举成员就能拿到字符串:

print(Permission.User.ADD)  # 输出 'add_user'
# 还能轻松遍历所有用户权限
for perm in Permission.User:
    print(perm)

这种方式比纯类更严谨,能有效防止不小心修改常量值(枚举成员默认不可变)。

3. 嵌套数据类(适合需要扩展的场景)

如果以后你的常量可能需要附加更多属性(比如权限描述),可以用dataclasses模块,加上frozen=True确保常量不可变:

from dataclasses import dataclass

@dataclass(frozen=True)
class Permission:
    @dataclass(frozen=True)
    class User:
        ADD = ('add_user', '允许添加用户')
        VIEW = ('view_user', '允许查看用户')
        EDIT = ('edit_user', '允许编辑用户')
    
    @dataclass(frozen=True)
    class Tool:
        ADD = ('add_tool', '允许添加工具')
        VIEW = ('view_tool', '允许查看工具')
        EDIT = ('edit_tool', '允许编辑工具')

使用时可以拿到带描述的元组:

print(Permission.User.ADD[0])  # 权限标识 'add_user'
print(Permission.User.ADD[1])  # 权限描述 '允许添加用户'
总结

如果只是简单的字符串常量分组,纯嵌套类或者StrEnum嵌套都很合适,后者更符合Python的最佳实践;如果需要扩展属性,就选嵌套数据类。根据你的需求,前两种应该就能完美解决问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:22:43