在python对象实际使用过程中,会对其对象的属性进行增删改查,那么这背后是对哪种类型的”数据结构“进行增删改查呢?
下面以Blog类进行说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Blog(object): title = 'Python对象深度理解'
def __init__(self): pass
myFirstBlog = Blog()
myFirstBlog.author='Pysenen' print(myFirstBlog.author)
print(myFirstBlog.title)
myFirstBlog.title='新修改' print(myFirstBlog.title)
del myFirstBlog.author print(myFirstBlog.author)
|
以上操作其实就是对 myFirstBlog这个对象里的dict数据结构进行操作
打印myFirstBlog.dict
1
| {'author': 'Pysenen', 'title': '新修改'}
|
因此对对象的操作,其实就是对对象的dict属性操作
也即:
1 2 3 4 5 6 7 8 9 10 11
| myFirstBlog.__dict__['author']='Python'
myFirstBlog.__dict__['title']
myFirstBlog.__dict__['title']='新的title'
myFirstBlog.__dict__.pop('author')
|
因此容易扩展,对对象的操作,可以转为使用字典的方式进行灵活操作,可回到大家熟悉的python字典数据结构的概念
1 2 3 4 5 6 7 8 9 10 11 12 13
| batch_dict={ 'name':'foo', 'age':'26', 'email':'test@gmail.com', 'company':'nonono' } myFirstBlog.__dict__=batch_dict
print(myFirstBlog.__dict__)
del myFirstBlog.__dict__ print(myFirstBlog.__dict__)
|
————分割线————
由于这篇文章写得时间比较早,其实还有涉及更深的内容:类对象或者实例的所有属性都放在一个字典里,这里背后其实是由元类type掌控着。
所有的类都是type元类创建,它创建类的方式 normal_class=type(class_name,class_bases,class_dict),这里的class_dict就是上面提到普通类的字典
例如上面定义的Blog类,用元类方式创建如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| batch_dict={ 'name':'foo', 'age':'26', 'email':'test@gmail.com', 'company':'nonono' }
Blog=type('Blog',(object,),batch_dict)
In [1]: batch_dict={ ...: 'name':'foo', ...: 'age':'26', ...: 'email':'test@gmail.com', ...: 'company':'nonono' ...: }
In [2]: Blog=type('Blog',(object,),batch_dict)
In [3]: Blog Out[3]: __main__.Blog
In [4]: b=Blog()
In [5]: b.name Out[5]: 'foo'
In [6]: b.age Out[6]: '26'
In [7]: b.email Out[7]: 'test@gmail.com'
In [8]: type(b) Out[8]: __main__.Blog
|
本文内容相对容易理解,如果要深入挖掘元类,可以查阅本博客文章《 Python进阶——type与元类》