python中的__dict__魔术方法
时间: 2024-06-20 13:02:14 浏览: 9
`__dict__` 是 Python 中一个特殊的内置属性,它是一个字典,用于存储对象的所有实例变量(也称为属性)及其对应的值。这个字典是动态生成的,当你访问一个对象的属性时,如果该属性不存在,Python 会自动查找 `__dict__`。当你使用 `dir()` 函数列出一个对象的所有属性时,通常会看到 `__dict__` 作为其中的一个。
当你定义一个类时,可以通过 `self` 关键字在类的方法内部访问和修改 `__dict__`,从而动态地添加或删除属性。例如:
```python
class MyClass:
def __init__(self, name):
self.name = name
def add_attribute(self, key, value):
self.__dict__[key] = value
my_instance = MyClass("John")
my_instance.add_attribute("age", 30)
print(my_instance.__dict__) # 输出: {'name': 'John', 'age': 30}
```
相关问题
python中__dict__
__dict__是Python中的一个特殊属性,它是一个字典(dictionary),用于存储对象的属性和方法。每个对象都有一个__dict__属性,它记录了对象的所有属性和方法,并以键值对的形式存储。
当我们通过点运算符(.)或getattr()函数访问对象的属性时,实际上是在__dict__字典中查找对应的键值对。如果找到了对应的键,就返回相应的值;如果没有找到,会引发AttributeError异常。
下面是一个简单的例子,说明了__dict__的用法:
```python
class MyClass:
def __init__(self):
self.name = "John"
self.age = 25
obj = MyClass()
print(obj.__dict__) # {'name': 'John', 'age': 25}
print(obj.name) # John
print(obj.__dict__["age"]) # 25
```
在上面的例子中,我们创建了一个名为MyClass的类,并在其构造函数中初始化了两个属性name和age。创建了一个obj对象后,我们可以通过obj.__dict__访问到对象的属性字典,也可以通过obj.name或者obj.__dict__["age"]直接访问属性的值。
需要注意的是,__dict__只能访问到实例属性和方法,而不能访问到类属性和方法。类属性和方法存储在类的__dict__属性中。
python类__dict__
在 Python 中,`__dict__` 是每个对象(包括类)内部的一个特殊属性,它是一个字典,用于存储对象的属性和方法。当你创建一个类并给它添加属性时,这些属性会自动被添加到 `__dict__` 中。`__dict__` 的键通常是属性名,值则是对应的属性值。
当你访问一个对象的属性时,Python 实际上是查找 `__dict__` 字典。如果找到了,就返回对应值;如果 `__dict__` 中没有找到,Python 会继续向上搜索其父类的 `__dict__`,直到找到或到达 `object` 类(所有类的基类)为止。
举个例子:
```python
class MyClass:
def __init__(self):
self.my_attribute = 'hello'
# 创建对象并查看它的 __dict__
my_instance = MyClass()
print(my_instance.__dict__) # 输出:{'my_attribute': 'hello'}
```