本文共 3296 字,大约阅读时间需要 10 分钟。
类的属性都是存放在字典中,所以对类或实例的属性进行操作实际上就是对字典的操作。
类的属性相关操作如下图:代码块如下: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.timeprint(Door.__dict__)#删除类的add函数属性del Door.addprint(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.实例的属性相关操作
如下图:代码块如下: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 = testdoor1.add()#####删除实例的属性######删除实例中的宽度属性del door1.widthprint(door1.__dict__)# print(door1.width) #报错,已经没有宽度属性了#删除实例中的‘函数’属性del door1.adddoor1.add() #报错,已删除,不存在该属性了#####修改实例的属性######修改数据属性door1.size =100print(door1.size)#修改函数属性def boom(): print("boom boom!!有人在敲门")door1.open = boom #更改了方法对应的内存地址,也就更改了函数的内容print(Door.__dict__)door1.open()
有意思的事
见下图:该部分代码块如下: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)
转载于:https://blog.51cto.com/10836356/2108787