以下代码不会抛出AttributeError
class MyClass():
def __init__(self):
self.a = 'A'
self.b = 'B'
my_obj = MyClass()
my_obj.c = 'C'
Run Code Online (Sandbox Code Playgroud)
这与之形成鲜明对比
>>> {}.a = 'A'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'a'
Run Code Online (Sandbox Code Playgroud)
有什么区别?它是关于dict是一个内置类,而MyClass是用户定义的吗?
不同之处在于,用户定义类的实例默认具有与其关联的属性字典。您可以使用vars(my_obj)
或访问该词典my_obj.__dict__
。您可以通过定义来阻止创建属性字典__slots__
:
class MyClass(object):
__slots__ = []
Run Code Online (Sandbox Code Playgroud)
内置类型还可以提供属性字典,但通常不会。支持属性的内置类型的一个示例是函数类型。
归档时间: |
|
查看次数: |
223 次 |
最近记录: |