# 习题 41: 物以类聚¶

stuff = ['Test', 'This', 'Out']
print ' '.join(stuff)

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 class TheThing(object): def __init__(self): self.number = 0 def some_function(self): print "I got called." def add_me_up(self, more): self.number += more return self.number # two different things a = TheThing() b = TheThing() a.some_function() b.some_function() print a.add_me_up(20) print b.add_me_up(30) print a.number print b.number # Study this. This is how you pass a variable # from one class to another. You will need this. class TheMultiplier(object): def __init__(self, base): self.base = base def do_it(self, m): return m * self.base x = TheMultiplier(a.number) print x.do_it(b.number)

Warning

Class 是很强大的东西，你应该好好读读相关的东西。尽可能多找些东西读并且多多实验。你其实知道它们该怎么用，只要试试就知道了。其实我马上就要去练吉他了，所以我不会让你写练习了。你将使用 class 写一个练习。

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 ## Animal is-a object (yes, sort of confusing) look at the extra credit class Animal(object): pass ## ?? class Dog(Animal): def __init__(self, name): ## ?? self.name = name ## ?? class Cat(Animal): def __init__(self, name): ## ?? self.name = name ## ?? class Person(object): def __init__(self, name): ## ?? self.name = name ## Person has-a pet of some kind self.pet = None ## ?? class Employee(Person): def __init__(self, name, salary): ## ?? hmm what is this strange magic? super(Employee, self).__init__(name) ## ?? self.salary = salary ## ?? class Fish(object): pass ## ?? class Salmon(Fish): pass ## ?? class Halibut(Fish): pass ## rover is-a Dog rover = Dog("Rover") ## ?? satan = Cat("Satan") ## ?? mary = Person("Mary") ## ?? mary.pet = satan ## ?? frank = Employee("Frank", 120000) ## ?? frank.pet = rover ## ?? flipper = Fish() ## ?? crouse = Salmon() ## ?? harry = Halibut()

## 你应该看到的结果¶

1. 怎样创建一个 class Game(object) 并且放函数到里边去。
2. __init__ 是一个特殊的初始方法，可以预设重要的变量在里边。
3. 为 class 添加函数的方法是将函数在 class 下再缩进一阶，class 的架构就是通过缩进实现的，这点很重要。
4. 你在函数里的内容又缩进了一阶。
5. 注意冒号的用法。
6. 理解 self 的概念，以及它在 __init__playdeath 里是怎样使用的。
7. 研究 play 里的 getattr 的功能，这样你就能明白 play 所做的事情。其实你可以手动在 Python 命令行实验一下，从而弄懂它。
8. 最后我们怎样创建了一个 Game ，然后通过 play() 让所有的东西运行起来。

## 加分习题¶

1. 研究一下 __dict__ 是什么东西，应该怎样使用。
2. 再为游戏添加一些房间，确认自己已经学会使用 class 。
3. 创建一个新版本，里边使用两个 class，其中一个是 Map ，另一个是 Engine 。提示: 把 play 放到 Engine 里面。

## 常见问题回答¶

result = sentence[:] 是做什么的？