python定义实例方法,python类的应用实例
遗产
用大蟒继承是件好事。我不认为你必须告诉getattr黑客。如果你想要那些,请向下滚动。
可以强制类词典引用其他对象。
类矩形(对象) :
def __init__(自身,宽度,高度) :
自身宽度=宽度
自我高度=高度
默认区域(自身) :
return self.width * self.height
classcoloredrectangle(矩形) :
def __init__(self,rect,color):
自我__dict__=rect .__词典_ _
自我颜色=颜色
rect=rectangle (3,5)))))))))))))。
crect=coloredrectangle(rect,color=blue )。
打印宽度、高度、颜色
#35蓝
这两个引用同一个矩形对象。
crect.width=10
打印矩形宽度、矩形高度
#10 5
这是一个关于元编程的很好的演讲,标题是Python3,但很多也适用于蟒蛇皮.x:davidbeazleypython meta编程
用于模块的黑客
但是,如果由于某种原因,多个彩色矩形希望引用同一个基本矩形,它们将会相互冲突。
eve=rectangle (3,5)))))))))))))。
Kain=coloredrectangle(Eve,color=blue ))))))。
Abel=coloredrectangle(Eve,color=red )。
打印夏娃颜色、凯恩颜色、亚伯颜色
#红色红色红色
如果想要不同的"委派对象",则可以从基本矩形获取属性,但不会相互干扰。我必须向用于模块的黑客求助。这也很有趣:
classcoloredrectangle(矩形) :
def __init__(self,rect,color):
self.rect=rect
自我颜色=颜色
def __getattr__(self,attr):
returngetattr(self.rect,attr))。
eve=rectangle (3,5)))))))))))))。
这样可以避免干扰。
Kain=coloredrectangle(Eve,color=blue ))))))。
Abel=coloredrectangle(Eve,color=red )。
打印凯恩颜色,亚伯颜色
#蓝色红色
关于__getattr__和__getattribute__:
getattrandgetattributeisthat之间的关键差异是
getattrisonlyinvokediftheattributewasn tfoundtheusaulways。这有利于实现fallbackformissingattributes,
和可能是你想要的。07001
__getattr__还可以部分更新代理,以便只处理缺少的属性。这可能会导致混乱。
kain.width=10
打印eve.area(、kain.area、abel.area)。
# 15 50 15
要避免这种情况,请执行以下操作:
def __setattr__(self,attr,value):
if attr==color :
返回超级(彩色矩形,自身)。setattr(属性,值)).
提出你最喜欢的例外
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。