7.5 畅爽开怀,实例方法
类的实例可以引用属性,但我们更早了解到的是类的实例可以使用方法这件事(见第三章:字符串的方法)。方法就是函数,但我们把这个函数称之为方法(Method)。方法是供实例使用的,因此我们还可以称之为实例方法(Instance Method)。当你掉喝一瓶可乐的时候,你会从咖啡因和大量的糖分中获得能量,如果使用类的方法来表示可乐的这个“功能”的话,那应该是这样的:
class CocaCola:
formula = ['caffeine','sugar','water','soda']
def drink(self):
print('Energy!')
coke = CocaCola()
coke.drink()
运行结果:
>>> Energy!
注:事实上,英文中“功能”和“函数”都由一个词表达—— Function。
self?
我知道你现在的关注点一定在这个奇怪的地方——似乎没有派上任何用场的 self 参数。我们来说明一下原理,其实很简单,我们不妨修改一下代码:
class CocaCola:
formula = ['caffeine','sugar','water','soda']
def drink(coke): # HERE!
print('Energy!')
coke = CocaCola()
coke.drink()
运行结果:
>>> Energy!
怎么样,现在有些头绪了吧?和你想的一样,这个参数其实就是被创建的实例本身!还记得我们在第四章说的函数的使用办法吗?就是将一个个对象作为参数放入函数括号内。
再进一步说,一旦一个类被实例化,那么我们其实可以同样使用原来的方式:
coke = CocaCola
coke.drink() == CocaCola.drink(coke) #左右两边的写法完全一致
被实例化的对象会被编译器默默地传入后面方法的括号中,作为第一个参数。上面这两种方法是一样的,但是我们更多地会写成前面那种形式。其实 self 这个参数名称是可以随意修改名称的(编译器并不会因此而报错),但是按照 Python 的规矩,我们还是统一使用 self。
