我在SO上看到这个问题防止在外部创建新属性init它展示了如何防止向类的对象添加新属性。
我希望整个类甚至整个加载的模块具有相同的行为。
示例类:
class Klass:
a = 0
b = 1
另一个模块:
from Klass import Klass
Klass.c = 2 # this should raise an error
这可能吗?
如果您试图阻止修改类本身,您可以创建一个元类来定义__setattr__
类的方法。
class FrozenMeta(type):
def __new__(cls, name, bases, dct):
inst = super().__new__(cls, name, bases, {"_FrozenMeta__frozen": False, **dct})
inst.__frozen = True
return inst
def __setattr__(self, key, value):
if self.__frozen and not hasattr(self, key):
raise TypeError("I am frozen")
super().__setattr__(key, value)
class A(metaclass=FrozenMeta):
a = 1
b = 2
A.a = 2
A.c = 1 # TypeError: I am frozen
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)