你可能已经意识到,查看或修改对象中的数据(属性)有两种方法。可以直接访问,像这样:
myDog.cooked_level = 5
或者也可以使用修改属性的方法,例如:
myDog.cook(5)
如果热狗开始时是生的(cooked_level = 0
),这两种做法的作用相同。它们都会把 cooked_level
设置为 5。那么为什么还要那么麻烦,专门建立一个方法来做这个工作呢?为什么不直接修改呢?
我可以想到至少两个原因。
如果直接访问属性,烤热狗至少需要两部分:改变
cooked_level
和改变cooked_string
。而利用一个方法,可以只做一个方法调用,它就会完成我们需要的一切工作。如果直接访问属性,就会有这样的结果:
cooked_level = cooked_level - 2
这会使热狗比以前还生。不过热狗肯定不会越烤越生!所以这是毫无意义的。通过使用方法,可以确保 cooked_level
只会增加而不会减少。
术语箱
按编程术语来讲,如果限制对对象数据的访问,使得只能通过使用方法来获取和修改这些数据,就称为数据隐藏(data hiding)。Python 没有提供任何途径来保证数据隐藏,不过如果你愿意,可以适当地编写代码来遵循这个规则。
目前为止,我们已经看到对象包含属性和方法。而且了解了如何创建对象以及如何利用一个名为 __init__
的特殊方法初始化对象。我们还看到了另一个特殊方法 __str__
,利用这个方法可以更好地打印我们的对象。