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.实例的属性相关操作
如下图:


代码块如下:

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

你可能感兴趣的:(Python_类和实例属性的增删改查操作)