Python中的__dict__属性介绍
在Python中,所有的对象都有一个名为__dict__
的属性,这个属性用来存储对象的所有属性和方法。我们可以使用这个属性来访问对象的属性和方法,以及动态地为对象添加或删除属性和方法。
访问对象属性
我们可以使用__dict__
属性来访问对象的属性。例如,对于一个类Person
的实例p
,我们可以通过p.__dict__
来访问p
对象的所有属性:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person('John', 20)
print(p.__dict__)
上面的代码会打印输出{'name': 'John', 'age': 20}
,这个字典中存储了p
对象的属性name
和age
。
动态添加属性
我们也可以使用__dict__
属性来动态地为对象添加属性。例如,对于一个类Person
的实例p
,我们可以通过p.__dict__['gender'] = 'Male'
来动态地为p
对象添加一个gender
属性:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person('John', 20)
p.__dict__['gender'] = 'Male'
print(p.__dict__)
上面的代码会打印输出{'name': 'John', 'age': 20, 'gender': 'Male'}
,这个字典中多了一个键值对'gender': 'Male'
。
动态添加方法
除了可以动态地添加属性,我们也可以使用__dict__
属性来动态地为对象添加方法。例如,对于一个类Person
的实例p
,我们可以通过p.__dict__['hello'] = lambda self: print('Hello!')
来动态地为p
对象添加一个hello
方法:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person('John', 20)
p.__dict__['hello'] = lambda self: print('Hello!')
p.hello() # 输出:Hello!
上面的代码中,我们首先将一个lambda函数赋给了p.__dict__['hello']
,这个lambda函数定义了一个hello
方法,用来输出Hello!
。然后,我们可以通过p.hello()
来调用这个新添加的方法。
总结
__dict__
属性是Python对象的一个非常有用的特性,可以让我们动态地访问和修改对象的属性和方法。但是,在实际编程中,我们应该尽可能地避免直接使用__dict__
属性,而是应该使用对象的正常方式来访问和修改属性和方法。