来自Raymond Hettinger's recepie的示例
class Root(object):
def draw(self):
# the delegation chain stops here
assert not hasattr(super(Root, self), 'draw')
class Shape(Root):
def __init__(self, shapename, **kwds):
self.shapename = shapename
super(Shape, self).__init__(**kwds)
def draw(self):
print 'Drawing. Setting shape to:', self.shapename
super(Shape, self).draw()
class ColoredShape(Shape):
def __init__(self, color, **kwds):
self.color = color
super(ColoredShape, self).__init__(**kwds)
def draw(self):
print 'Drawing. Setting color to:', self.color
super(ColoredShape, self).draw()
# ------- Show how to incorporate a non-cooperative class --------
class Moveable(object):
# non-cooperative class that doesn't use super()
def __init__(self, x, y):
self.x = x
self.y = y
def draw(self):
print 'Drawing at position:', self.x, self.y
class MoveableAdapter(Root):
# make a cooperative adapter class for Moveable
def __init__(self, x, y, **kwds):
self.moveable = Moveable(x, y)
super(MoveableAdapter, self).__init__(**kwds)
def draw(self):
self.moveable.draw()
super(MoveableAdapter, self).draw()
class MovableColoredShape(ColoredShape, MoveableAdapter):
pass
m = MovableColoredShape(color='red', shapename='triangle', x=10, y=20)
m.draw()
print m.__mro__
我明白这个密码。我不明白的是,为什么我在执行此代码时会出现此错误:
^{pr2}$
由于神秘的原因,
__mro__
属性只在类上可见,而在实例上不可见。在试试这个:
相关问题 更多 >
编程相关推荐