Python_類和實例屬性的增刪改查操作

類的屬性都是存放在字典中,所以對類或實例的屬性進行操作實際上就是對字典的操作。
類的屬性相關操作
如下圖:
Python_類和實例屬性的增刪改查操作
Python_類和實例屬性的增刪改查操作
Python_類和實例屬性的增刪改查操作
代碼塊如下:

class Door():
    "門的類"
    address = "浙江省杭州市"
    def __init__(self,size,color,type):#構造函數
        "初始化門的數據"
        self.size = size
        self.color = color
        self.type = type
    def open(self):
        "門打開的方法"
        print("這個%s門打開了" %self.type)
    def off(self,time):
        "門關閉的方法"
        print("這個%s門關閉了,時間爲;%s" %(self.type,time))

#####查看類的屬性#####
print(Door.__dict__)
print(Door.address)

#####增加類的屬性#####
#增加一個生產日期(time)數據屬性
Door.time = "2018-04-25 23:55:00"
print(Door.__dict__)
print(Door.time)
#增加一個函數屬性
def fun(seif,name):
    "誰在前門"
    print("%s在boomboom敲門了"%name)
Door.add = fun  #函數內存地址的映射
#查看
print(Door.__dict__)
#調用類的屬性
#實例化
door1 = Door(16, 'red', '木門')
#實例中調用新增的數據屬性
print(door1.time)
#實例中調用新增的函數屬性
print(door1.add('zhouzhou'))

#####刪除類的屬性#####
#刪除類的生產日期(time)數據屬性
del Door.time
print(Door.__dict__)
#刪除類的add函數屬性
del Door.add
print(Door.__dict__)
# 實例化
door2 = Door(16, 'red', '木門')
#實例中調用新增的函數屬性
# print(door2.time)           #報錯,沒有該數據屬性
#實例中調用新增的add函數屬性
# print(door2.add)           #報錯,沒有該函數屬性

#####修改類的屬性#####
#修改類的數據屬性
Door.address = "湖北省武漢市"
print(Door.__dict__)
print(Door.address)
#修改類的函數屬性
def modify():
    print("這是更改後的函數")
#更改類的open屬性
Door.open = modify      #函數內存地址的更改,導致執行的函數也對應進行了更改
print(Door.__dict__)
#調用類更改後的函數屬性
Door.open()
#實例化
door3 = Door(16, 'red', '木門')
#實例中調用類修改的數據屬性
print(door3.address)
#實例中調用類修改的函數屬性
print(door3.open)
door3.open()    #報錯,因爲實例化的對象在調用類的函數時,均會帶上參數self但此處並不需要實參

2.實例的屬性相關操作
如下圖:
Python_類和實例屬性的增刪改查操作
Python_類和實例屬性的增刪改查操作
代碼塊如下:

class Door():
    "門的類"
    address = "浙江省杭州市"
    def __init__(self,size,color,type):#構造函數
        "初始化門的數據"
        self.size = size
        self.color = color
        self.type = type
    def open(self):
        "門打開的方法"
        print("這個%s門打開了" %self.type)
    def off(self,time):
        "門關閉的方法"
        print("這個%s門關閉了,時間爲;%s" %(self.type,time))

#實例
door1 = Door(16, 'red', '木門')
#####查看實例的屬性#####
print(door1.__dict__)
print(door1.size)

#####增加實例的屬性#####
#增加實例的寬度屬性
door1.width = 180
#實例查看新增的屬性
print(door1.__dict__)
print(door1.width)
#類中查看是否含有該屬性
print(Door.__dict__)
# print(Door.width)       #報錯,類中沒有改屬性--即:實例一定可以訪問類的屬性,類不一定能訪問實例的屬性
#其他實例訪問
door2 = Door(23, 'white', '鋁合金')
# print(door2.width)      #報錯,width屬性只是在實例door1中存在,不在類中存在,更不會在實例door2中存在
#增加一個函數屬性
def test():
    print("這是一個測試方法")
door1.add = test
door1.add()

#####刪除實例的屬性#####
#刪除實例中的寬度屬性
del door1.width
print(door1.__dict__)
# print(door1.width)      #報錯,已經沒有寬度屬性了
#刪除實例中的‘函數’屬性
del door1.add
door1.add()         #報錯,已刪除,不存在該屬性了

#####修改實例的屬性#####
#修改數據屬性
door1.size =100
print(door1.size)
#修改函數屬性
def boom():
    print("boom boom!!有人在敲門")
door1.open = boom   #更改了方法對應的內存地址,也就更改了函數的內容
print(Door.__dict__)
door1.open()

有意思的事
見下圖:
Python_類和實例屬性的增刪改查操作
該部分代碼塊如下:

class Door():
    "門的類"
    address = "浙江省杭州市"
    def __init__(self,size,color,type):#構造函數
        "初始化門的數據"
        self.size = size
        self.color = color
        self.type = type
    def open(self):
        "門打開的方法"
        print("這個%s門打開了" %self.type)
    def off(self,time):
        "門關閉的方法"
        print("這個%s門關閉了,時間爲;%s" %(self.type,time))

door1 = Door(16, 'red', '木門')
print("實例數據屬性中沒有address,向類屬性中找address屬性,address=",door1.address)
print("直接調用類中的address屬性,address=",Door.address)
#在實例中增加了一個address屬性
door1.address = "湖北省武漢市"
print("因爲現在實例中有了address,所以可以直接調用,address=",door1.address)
print("此處仍然是調用Door類中數據屬性,和實例無關,address=",Door.address)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章