类即对象,就像哺乳动物,属性是可以遗传的,这点就是类的继承
儿子相对父亲,就像是子类相对父类,子类有父类的全部属性,而且子类也可以重新定义自己的属性值,来覆盖父类的属性值
当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类,而被继承的class称为基类、父类。
如下示例代码:
class a():
def run(self):
print('a class...')
class b(a):
def run(self):
print('b class...')
class c(a):
def hello(self):
print('hello c')
下面来初始化类的值,以及使用函数名看看情况
ac = a()
bc = b()
cc = c()
ac.run()
# 结果:a class...
bc.run()
# 结果:b class...
cc.run()
# 结果:a class...
cc.hello()
# 结果:hello c
从上面结果看,可以得到如下结论:
- ac打印是a class...
,正是a类中定义的输出
- bc打印是b class...
,说明b的重新定义run并覆盖了父类的run方法
- cc打印是a class...
,c并没有定义run,它的run方法是从父类a里面继承过来的,自己定义了hello方法
继承:子类从继承的父类中,得到父类的全部属性和方法
接下来就是类的特性——多态
多态,意思就是多种形态,这里用动物来作比较最合适
首先定义一个动物的父类:
class Animal():
def get_type(self):
print("Animal...")
然后定义一个猴子类,继承动物:
class Monkey(Animal):
def get_type(self):
print("Monkey...")
再定义一个小白鼠类,继承动物:
class Mouse(Animal):
def get_type(self):
print("Mouse...")
接着定义一个人类,继承猴子:
class People(Monkey):
def get_type(self):
print("People...")
定义好三个类之后,然后定义一个适用动物类的函数:
def get_animal(animal):
animal.get_type()
get_animal函数接收一个动物类的对象参数,然后运行它的get_type()方法
最后实例化刚才定义的所有类,然后调用get_animal函数看看
animal = Animal()
monkey = Monkey()
mouse = Mouse()
people = People()
get_animal(animal)
# 结果:Animal...
get_animal(monkey)
# 结果:Monkey...
get_animal(mouse)
# 结果:Mouse...
get_animal(people)
# 结果:People...
以上代码就是检测类的多态。都是基于同一个父类,所以肯定有父类的方法,但此时他们不再是父类或者是同一种类,而是各种形态的类。
这也就是类的多态性【有点万变不离其宗的意思】
一个小白肯定会问的小问题:定义一个类,括号内有的是空,有的是放入父类。我记得每个类都会继承object类,为什么有的可以写空呢?
答:python3隐式继承了object,所以python3中写不写继承object都是没有区别的 。【不过在Python2.x是有区别的】