开发者学堂课程【Python 入门 2020年版:继承的基本使用】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10385
继承的基本使用
内容介绍:
一、 面向对象的三大特征
二、 继承的使用
一、面向对象的三大特征
面向对象的编程里有三大特性:封装、继承和多态。
1.封装:函数是对语句的封装;类是对函数和变量的封装
def test():
a = 23 # 赋值语句
a = 3 # 算数运算符表达式语句
print( ' hello')
print( ' good
‘
)
在我们最开始写代码的时候写的是一个一个的语句,多个语句写起来很复杂我们就会把他们打包成一个函数,函数就是一种封装。
class Person(object):
type =
‘
人类
’
def __init__(self):
pass
def eat(self):
pass
类里面是一个一个函数,是更高级的封装。
2.继承:类和类之间可以人为手动的建立父子关系,子类可以使用
3.多态:是一种技巧,提高代码的灵活度。
二、继承的使用
class Animal(object):
def __init__(self,name,age) :
self.name = name
self.age = age
def sleep(self):
print(self.name +
‘
正在睡觉
’
)
class Dog(object):
def __init__(self,name,age) :
self.name = name
self.age = age
def sleep(self):
print(self.name +
‘
正在睡觉
’
)
def bark(self):
print(self.name + '正在叫
‘
)
class
S
tudent(object):
def __init_
_
(serf, name,age) :
self.name = name
self.age = age
def sleep(self):
print(self.name + '正在睡觉
‘
)
def study(self):
print(self.name +
‘
正在好好学习
’
)
在这段代码中会发现有很多重复的地方,这时就可以创建一个认为的继承关系。
把 Animal 作为父类(基类), dog 和 student 作为子类(派生类)。如果父类里有子类要使用的类,那么子类就可以直接使用父类中的类不用再创建相应的类。
class Animal(object):
def __init__(self,name,age) :
self.name = name
self.age = age
def sleep(self):
print(self.name +
‘
正在睡觉
’
)
class Dog(
Animal
):
def bark(self):
print(self.name + '正在叫
‘
)
class
S
tudent(
Animal
):
def study(self):
print(self.name +
‘
正在好好学习
’
)
# Dog()调用
__new__ 方法,再调用
_
_init__ 方法
# Dog里没有
__new__ 方法,会查看父类是否重写了
_
_new__ 方法
#
父类里也没有重写
__new__ 方法,查找父类的父类,找到了
object
# 调用
_
_init__ 方法, Dog 类没有实现,会自动找
Animal 父类
d1
=
Dog
print(d1)
# 父类里定义的属性,子类可以直接使用
在这种情况下运行 d1 会报错,在运行时 Dog() 会调用 __new__ 方法,再调用 __init__ 方法, Dog 里没有 __new__ 方法,会查看父类是否重写了 __new__ 方法,父类里也没有重写 __new__ 方法,会查找父类的父类,找到了 object 中的 __new__ 方法。
调用 __init__ 方法,Dog里没有 __init__ 方法,会查看 Animal 父类里是否有,Animal的 __init__ 方法需要两个参数但是 d1 并没有两个参数所以会报错。
class Animal(object):
def __init__(self,name,age) :
self.name = name
self.age = age
def sleep(self):
print(self.name +
‘
正在睡觉
’
)
class Dog(
Animal
):
def bark(self):
print(self.name + '正在叫
‘
)
class
S
tudent(
Animal
):
def study(self):
print(self.name +
‘
正在好好学习
’
)
d1 = Dog('大黄',3)
print(d1.name) # 父类里定义的属性,子类可以查接使用
d1.sleep() # 父类的方法子类实例对象可以直接调用
父类里定义的属性,子类可以直接使用,父类的方法子类实例对象可以直接调用。
这里的 Dog 不仅能够调用 sleep 还能调用 dark。 Student 可以调用 sleep 和 study ,但不能调用 dark 。