德米特法则与Python
有没有工具可以检查Python代码是否符合德梅特法则?
我在pychecker中看到提到德梅特法则,但这个工具似乎对这个法则的理解和我预期的不太一样:http://en.wikipedia.org/wiki/Law_of_Demeter
维基百科上的定义是:德梅特法则要求一个对象O的方法M只能调用以下几种对象的方法:
- 对象O自己
- 方法M的参数
- 在方法M内部创建的任何对象
- 对象O的直接组成部分
- 在方法M的范围内,O可以访问的全局变量
3 个回答
1
你可以这样打破那个规则:
class SomeClass:
def someMethod(self):
self.getSomeOtherClass().someOtherMethod() # this breaks the law
def getSomeOtherClass(self):
class_ = SomeOtherClass()
return class_
还是说不行呢?
1
德梅特法则...一个对象O的方法M只能调用以下几种对象的方法:
- O自己——也就是
self
变量。这一点很简单。 - M的参数——也就是传给方法的局部变量。换句话说,就是在
locals()
里。 - 在M内部创建的任何对象——也就是局部变量。也就是说,在
locals()
里。 - O的直接组成对象——也就是
self
变量。 - 在M的作用域内,O可以访问的全局变量——也就是在
global
语句中命名的变量,或者是那些在局部命名空间中找不到的全局变量的隐式引用。也就是说在globals()
里。
嗯……函数没有其他可访问的变量,对吧?因为命名空间的工作方式,我看不出有什么可能会违反这个法则。
你有没有Python代码的例子,能违反这些规则中的一个?
你会如何访问另一个命名空间?
1
你提供的链接里对这个法律的解释太模糊了,太主观,根本无法通过任何自动化工具有效检查。你需要想出一些具体的规则,这些规则能确保代码符合这个法律。然后你就可以检查这些规则是否被遵守。