**ex40- 44都是类的知识 **
作者花了大篇幅来讲类和对象的关系。我就不用书上的例子,简单地说,我们可以从上帝视角来看待类和对象。
我想在地球上弄点东西。。。嗯,就先创建一个 人 “类”, 拿起泥土捏了捏,这样我就创建了人这个"类"
class Person():
...
接下来,我还想再分类,分成男人 “类” 和 女人 “类” 吧,把这个泥人加点东西,,那个泥人去点东西,好了,捏好了。。因为都是人类,继承有人类的特性。
class Man(Person):
...
class Women(Person):
...
我觉得还不够,赐给他们名字!男的叫锄禾,女的叫当午。这样我就创建了两个实例!
锄禾 = Man()
当午 = Women()
不知道明白了没,类和对象其实就是 is-a 和 has-a 的关系。看下面的代码,并修改 注释里的??为 用is-a 或 has-a 来描述类和对象
## Animal is-a object (yes, sort of confusing) look at the extra credeit
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()
在python3里,class后面的括号里不需要输入 object 。在pycharm里输入类名后,也不会自动加上object。当然,你喜欢还是可以加上的,python哲学里就有这么一句, 显式优于隐式。
Study Drills
- 研究一下为什么python要有类?
- 能否像对象一样的使用类?
- 给练习中的 animals, fish, 和 people 加点方法。看看在父类中定义方法,会有什么效果
- 看别人的代码,同样地用is-a 和has-a 来进行练习
- 用列表和字典创建更多关系
- 你觉得会有 is-many 的关系吗?了解一下多态,并尽量避免它