首页 新闻 会员 周边 捐助

装饰器类需要两个return

0
[已关闭问题] 关闭于 2025-08-03 17:17

'''
def role_required(allowed_roles):
"""基于角色的权限控制装饰器"""
def decorator(cls):
class Wrapper(cls):
def init(self, args, role='guest', **kwargs):
super().init(
args, **kwargs)
self.role = role

        def  __getattribute__(self, name):
            method = super().__getattribute__(name)
            if callable(method) and name.startswith('admin_'):
                def permission_wrapper(*args, **kwargs):
                    if self.role not in allowed_roles:
                        raise PermissionError(f"需要 {allowed_roles} 权限,当前是 {self.role}")
                    return method(*args, **kwargs)
                return permission_wrapper
            return method
    return Wrapper
return decorator

@role_required(allowed_roles=['admin', 'supervisor'])
class AdminPanel:
def admin_delete_user(self, user_id):
print(f"用户 {user_id} 已删除")

def admin_create_user(self, username):
    print(f"用户 {username} 已创建")

def view_users(self):
    print("查看用户列表")

if name == "main":
# 使用
admin = AdminPanel(role='editor')
try:
admin.admin_delete_user(101)
except PermissionError as e:
print(f"权限错误: {e}")

    admin.view_users()  # 不需要权限的方法

'''

_java_python的主页 _java_python | 小虾三级 | 园豆:1000
提问于:2025-08-03 17:17
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册