我有类似的东西: self.megacity.resourceloader.sound.mcintro.play()
有没有任何优雅的方法可以防止这样长的东西? 或许是某种结构性变化?
感谢。
答案 0 :(得分:2)
x = self.megacity.resourceloader.sound.mcintro
x.play()
答案 1 :(得分:2)
查找Law of Demeter以帮助您找到更好的方法来放松程序中组件之间的耦合:
当应用于面向对象程序时,Demeter法则可以 更准确地称为“Demeter for Function / Methods” (LOD-F)。在这种情况下,对象A可以请求服务(调用a 对象实例B的方法),但对象A不能“到达” 对象B访问另一个对象C,以请求其服务。 这样做意味着对象A隐含地需要更大 对象B的内部结构的知识。相反,B的界面 应该在必要时修改,以便它可以直接服务对象A. 请求,将其传播到任何相关的子组件。或者, A可能直接引用对象C并发出请求 直接到那个。如果遵循法律,则只有对象B知道自己的法律 内部结构。
答案 2 :(得分:0)
使用facade http://en.wikipedia.org/wiki/Facade_pattern:
class SoundPlayer:
def PlayMegacity (target):
target.megacity.resourceloader.sound.mcintro.play()