类的属性都是存放在字典中,所以对类或实例的属性进行操作实际上就是对字典的操作。
类的属性相关操作
如下图:
代码块如下:
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.实例的属性相关操作
如下图:
代码块如下:
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()
有意思的事
见下图:
该部分代码块如下:
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