Hum, after thinking twice, using a "frozendict" for type.__dict__ is maybe overkill for my needs (and intrused as noticed Nick). Attached patch for Python 3.3 is a simpler approach: add __final__ special value for class. If this variable is present, the type is constant. Example: --- class Test: __final__=True x = 1 Test.x = 2 # raise a TypeError Test.new_attr = 1 # raise a TypeError del Test.x # raise a TypeError --- There are various ways to deny the modification of a class attribute, but I don't know how to block the removal of an attribute of the addition of a new attribute without my patch. -- My patch is just a proof-of-concept. For example, it doesn't ensure that values are read-only too. By the way, how can I check that "a value is constant"? Except builtin immutable types, I suppose that the only way is to call hash(obj) and excepts an expect a TypeError. Victor