Python物件的屬性增刪改查的實質

2021-09-24 02:21:53 字數 1922 閱讀 8291

在python物件實際使用過程中,會對其物件的屬性進行增刪改查,那麼這背後是對哪種型別的」資料結構「進行增刪改查呢?

下面以blog類進行說明

class blog(object):

title = 'python物件深度理解'

def __init__(self):

pass

# 進行例項化也即建立乙個python物件

myfirstblog = blog()

# 物件屬性的增

myfirstblog.author='pysenen'

print(myfirstblog.author)

# 列印結果:pysenen

# 物件屬性的查

print(myfirstblog.title)

# 列印結果:python物件深度理解

# 物件屬性的寫(改)

myfirstblog.title='新修改'

print(myfirstblog.title)

# 列印結果:新修改

# 物件屬性的刪

del myfirstblog.author

print(myfirstblog.author)

# 列印結果:'blog' object has no attribute 'author'

以上操作其實就是對 myfirstblog這個物件裡的__dict__資料結構進行操作

列印myfirstblog.__dict__

因此對物件的操作,其實就是對物件的__dict__屬性操作

也即:

# 增

myfirstblog.__dict__['author']='python'

# 查myfirstblog.__dict__['title']

# 改myfirstblog.__dict__['title']='新的title'

# 刪myfirstblog.__dict__.pop('author')

因此容易擴充套件,對物件的操作,可以轉為使用字典的方式進行靈活操作,可回到大家熟悉的python字典資料結構的概念

batch_dict=

myfirstblog.__dict__=batch_dict

print(myfirstblog.__dict__)

del myfirstblog.__dict__

print(myfirstblog.__dict__)

# 列印結果:{}

————分割線————

所有的類都是type元類建立,它建立類的方式 normal_class=type(class_name,class_bases,class_dict),這裡的class_dict就是上面提到普通類的字典

例如上面定義的blog類,用元類方式建立如下:

batch_dict=

blog=type('blog',(object,),batch_dict)

in [1]: batch_dict=

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]: '[email protected]'

in [8]: type(b)

out[8]: __main__.blog

本文內容相對容易理解,如果要深入挖掘元類,可以查閱本部落格文章《 python高階——type與元類》

JS物件中屬性的增刪改查

物件屬於一種復合的資料型別,在物件中可以儲存多個不同資料型別的屬性 1.內建物件 在es標準中定義的物件,在任何的es的實現中都可以使用 比如 math string number boolean function object.2.宿主物件 由js的執行環境提供的物件,目前來講主要指由瀏覽器提供的...

class屬性增刪改查

今天發現自己每寫乙個功能就去上網查查,然後繼續寫,平靜下來反思,我才知道是因為自己太懶了,不願意總結,今天特地為此做總結。例子 檢視 var myinput document.getelementbyid myinput 方式1 console.log myinput.classname 方式2 c...

增刪改查及屬性

節點的增刪改查 節點建立 元素節點 document.createelement tag標籤名稱 文字節點 document.createtextnode 文字內容 屬性設定 node.setattribute 名稱,值 節點追加 父節點.insertbefore newnode,oldnode 將...