Python基础入门学习笔记 045 魔法方法:属性访问
属性访问
?__getattr__(self, name)
–定义当用户试图获取一个不存在的属性时的行为
?__getattribute__(self, name)
–定义当该类的属性被访问时的行为
?__setattr__(self, name, value)
–定义当一个属性被设置时的行为
?__delattr__(self, name)
–定义当一个属性被删除时的行为
实例1:
1 class C: 2 def __getattribute__(self, name): 3 print('getattribute') 4 # 使用 super() 调用 object 基类的 __getattribute__ 方法 5 return super().__getattribute__(name) 6 7 def __setattr__(self, name, value): 8 print('setattr') 9 super().__setattr__(name, value) 10 11 def __delattr__(self, name): 12 print('delattr') 13 super().__delattr__(name) 14 15 def __getattr__(self, name): 16 print('getattr') 17 18 >>> c = C() 19 >>> c.x 20 getattribute 21 getattr 22 >>> c.x = 1 23 setattr 24 >>> c.x 25 getattribute 26 1 27 >>> del c.x 28 delattr 29 >>> setattr(c,'y','Yellow') 30 setattr练习要求
?写一个矩形类,默认有宽和高两个属性;
?如果为一个叫square的属性赋值,那么说明这是一个正方形,值就是正方形的边长,此时宽和高都应该等于边长。
实例2:
1 class Rectangle: 2 def __init__(self, width=0, height=0): 3 self.width = width 4 self.height = height 5 6 def __setattr__(self, name, value):#一发生赋值操作,则会触发__setattr__()魔法方法 7 if name == 'square':#判断name属性是否为正方形 8 self.width = value 9 self.height = value 10 else: 11 self.__dict__[name] = value 12 13 def getArea(self): 14 return self.width * self.height 15 16 >>> r1 = Rectangle(4,5) 17 >>> r1.getArea() 18 20 19 >>> r1.square = 10 20 >>> r1.getArea() 21 100上一篇:Python基础入门学习笔记 044 魔法方法:简单定制
下一篇:Python基础入门学习笔记 046 魔法方法:描述符(Property的原理)
Python
spc文件怎么看,spc文件用什么打开?
0文件怎么看,0文件用什么打开?
sparseimage文件怎么看,sparseimage文件用什么打开?
sp文件怎么看,sp文件用什么打开?
dv文件怎么看,dv文件用什么打开?
soundpack文件怎么看,soundpack文件用什么打开?
dus文件怎么看,dus文件用什么打开?
dtw文件怎么看,dtw文件用什么打开?
spdf文件怎么看,spdf文件用什么打开?
0文件怎么看,0文件用什么打开?