有几个原因,尽管主要原因来自Zentar :“明示优于默示” 用C++这样的语言,这一类方法总是有一个隐含的论点:, 即
, 每当使用这种方法时,该方法就被推向 st。 在这种情况下,如果存在一个实例变量<代码>b以及一个全球变量<代码>b,则用户仅可参阅b<>>>>>>> 系指一种,而不必认识到另一种应用。 因此,沙尔迫使你明确了解你的范围,以避免混乱。
尽管如此,也有其他原因。 例如,我可以确定一个班级以外的职能,然后在操作时间将职能归入一个班级。 例如:
def log(self):
print "some library function requires all objects to have a log method"
print "unfortunately we re using the Student class, which doesn t have one"
print "this class is defined in a separate library, so we can t add the method"
print "fortunately, we can just add the method dynamically at runtime"
Student.log = log
在这里,<代码>自封/代码”明确表明,我们界定某一类别以外的职能,然后将其归入这一类别,是微不足道的。 我常常不做这样的事,但是,我这样做时,它非常有用。
这里是一个更加复杂的例子;假设我们想在另一类内确定一个类别,例如为了单位测试的目的:
class SomeUnitTests(TestCase):
def test_something(self):
class SomeMockObject(SomeActualObject):
def foo(self2):
self.assertEqual(self2.x, SOME_CONSTANT)
some_lib.do_something_with(SomeMockObject)
在这里,有明确的自私(我们可以称之为我们想要的东西,它不一定是自我的)允许区分内部和外部班子的<代码>。 同样,我经常这样做,但当我这样做时,这无疑是有用的。