Skip to content

Commit ef4590b

Browse files
committed
add inheritance and polymorphism
1 parent d97414e commit ef4590b

1 file changed

Lines changed: 118 additions & 0 deletions

File tree

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,120 @@
11
# 继承和多态
22

3+
在面向对象编程中,当我们已经创建了一个类,而又想再创建一个与之相似的类,比如添加几个方法,或者修改原来的方法,这时我们不必从头开始,可以从原来的类**派生**出一个新的类,我们把原来的类称为**父类****基类**,而派生出的类称为**子类****子类**继承了**父类**的所有数据和方法。
4+
5+
让我们看一个简单的例子,首先我们定义一个 Animal 类:
6+
7+
```python
8+
class Animal(object):
9+
def __init__(self, name):
10+
self.name = name
11+
def greet(self):
12+
print 'Hello, I am %s.' % self.name
13+
```
14+
15+
现在,我们想创建一个 Dog 类,比如:
16+
17+
```python
18+
class Dog(object):
19+
def __init__(self, name):
20+
self.name = name
21+
def greet(self):
22+
print 'WangWang.., I am %s. ' % self.name
23+
```
24+
25+
可以看到,Dog 类和 Animal 类几乎是一样的,只是 `greet` 方法不一样,我们完全没必要创建一个新的类,而是从 Animal 类派生出一个新的类:
26+
27+
```python
28+
class Dog(Animal):
29+
def greet(self):
30+
print 'WangWang.., I am %s. ' % self.name
31+
```
32+
33+
Dog 类是从 Animal 类继承而来的,Dog 类自动获得了 Animal 类的所有数据和方法,而且还可以对父类的方法进行修改,我们看看使用:
34+
35+
```python
36+
>>> animal = Animal('animal') # 创建 animal 实例
37+
>>> animal.greet()
38+
Hello, I am animal.
39+
>>>
40+
>>> dog = Dog('dog') # 创建 dog 实例
41+
>>> dog.greet()
42+
WangWang.., I am dog.
43+
```
44+
45+
我们还可以对 Dog 类添加新的方法:
46+
47+
```python
48+
class Dog(Animal):
49+
def greet(self):
50+
print 'WangWang.., I am %s. ' % self.name
51+
def run(self):
52+
print 'I am running.I am running'
53+
```
54+
55+
使用:
56+
57+
```python
58+
>>> dog = Dog('dog')
59+
>>> dog.greet()
60+
WangWang.., I am dog.
61+
>>> dog.run()
62+
I am running
63+
```
64+
65+
# 多态
66+
67+
多态的概念其实不难理解,它是指**对不同类型的变量进行相同的操作,它会根据对象(或类)类型的不同而表现出不同的行为**
68+
69+
事实上,我们经常用到多态的性质,比如:
70+
71+
```
72+
>>> 1 + 2
73+
3
74+
>>> 'a' + 'b'
75+
'ab'
76+
```
77+
78+
可以看到,我们对两个整数进行 `+` 操作,会返回它们的和,对两个字符进行相同的 `+` 操作,会返回拼接后的字符串。也就是说,**不同类型的对象对同一消息会作出不同的响应**
79+
80+
再看看类的例子:
81+
82+
```python
83+
class Animal(object):
84+
def __init__(self, name):
85+
self.name = name
86+
def greet(self):
87+
print 'Hello, I am %s.' % self.name
88+
89+
class Dog(Animal):
90+
def greet(self):
91+
print 'WangWang.., I am %s.' % self.name
92+
93+
class Cat(Animal):
94+
def greet(self):
95+
print 'MiaoMiao.., I am %s' % self.name
96+
97+
def hello(animal):
98+
animal.greet()
99+
```
100+
101+
看看多态的使用:
102+
103+
```python
104+
>>> dog = Dog('dog')
105+
>>> hello(dog)
106+
WangWang.., I am dog.
107+
>>>
108+
>>> cat = Cat('cat')
109+
>>> hello(cat)
110+
MiaoMiao.., I am cat
111+
```
112+
113+
可以看到,`cat``dog` 是两个不同的对象,对它们调用 `greet` 方法,它们会自动调用实际类型的 `greet` 方法,作出不同的响应。这就是多态的魅力。
114+
115+
# 小结
116+
117+
- 继承可以拿到父类的所有数据和方法,子类可以重写父类的方法,也可以新增自己特有的方法。
118+
- 有了继承,才有了多态,不同类的对象对同一消息会作出不同的相应。
119+
120+

0 commit comments

Comments
 (0)