the*_*man 3 python class class-members
考虑以下Python代码:
class a_class:
defined_var = 1
def a_function(self):
self.defined_var = 2
self.undefined_var = 3
Run Code Online (Sandbox Code Playgroud)
为在类的开头没有声明的变量赋值(然后隐式声明)的可能性(就像我undefined_var在上一个示例中所做
的那样)给我带来了一些问题,因为对于大型类,我忘记了什么我定义了我没有的东西。
我知道这个问题听起来很愚蠢。我已经使用C / C ++ / Java开发了很长时间,其中必须在类中定义变量。
有办法避免这种情况吗?我的意思是,我想要一个类似C / C ++ / Java的行为,如果我使用未定义的变量,则会出现错误。
默认情况下,python实例具有__dict__-字典,用于存储对象的所有属性。这就是允许他们存储任意属性的原因。您可以__dict__通过定义禁止创建__slots__。这是一个类级变量,列出了该类实例可以具有的所有属性的名称。如果类具有__slots__,则尝试分配给未定义的属性将引发异常。
例:
class MyClass:
__slots__ = ['defined_var']
def a_function(self):
self.defined_var = 2
obj = MyClass()
obj.a_function()
obj.undefined_var = 3 # throws AttributeError
Run Code Online (Sandbox Code Playgroud)