您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使类在Python中不可变的方法

使类在Python中不可变的方法

如果使用的旧技巧__slots__不适合您,则此方法或它的某些变体可以做到:只需编写__setattr__您的元类方法来保护您。在此示例中,我阻止分配新属性,但允许修改现有属性

def immutable_Meta(name, bases, dct):
    class Meta(type):
        def __init__(cls, name, bases, dct):
            type.__setattr__(cls,"attr",set(dct.keys()))
            type.__init__(cls, name, bases, dct)

        def __setattr__(cls, attr, value):
            if attr not in cls.attr:
                raise AttributeError ("Cannot assign attributes to this class")
            return type.__setattr__(cls, attr, value)
    return Meta(name, bases, dct)


class A:
    __Metaclass__ = immutable_Meta
    b = "test"

a = A()
a.c = 10 # this works
A.c = 20 # raises valueError
python 2022/1/1 18:37:39 有232人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶