三种编程方式
初学者一般比较容易接受的编程方式是“面向过程编程”,因为这种方式是根据业务逻辑从上到下写代码,容易被理解接受。
随着时间的推移,出现了“函数式编程”,把某些功能封装到函数中,需要使用时直接调用即可,不用重复撰写,节省了大量时间。(函数式编程可见我的博客:python入门使用(二):函数
接下来,又出现了“面向对象编程”,把函数进行分类和封装后放入对象中,大大提升开发工程的效率。
实例:
class Person: #创建类
def __init__(self,name,age): #__init__()方法称为类的构造方法,注意左右是两个英文下划线
self.name = name
self.age = age
def detail(self): #通过self调用被封装的内容
print(self.name)
print(self.age)
object1 = Person('caroline',19)
object1.detail() #python将object1传给self参数,即object1.detail(object1),此时函数内部的self=object1
将上述示例用函数式编程实现:
def detail1(name,age):
print(name)
print(age)
object1 = detail1('caroline',19)
面向对象编程的两大特性
面向对象编程有两大特性:封装和继承
1、封装
(1)封装内容
#封装内容
class Person: #创建类
def __init__(self,name,age): #__init__()方法称为类的构造方法,注意左右是两个英文下划线
self.name = name
self.age = age
object1 = Person('caroline',19) # 将'caroline'和19分别封装到object1及self的name和age属性
self在这里只是一个形式参数,当执行object1 = Person(‘caroline’,19),self等于object1。
(2)调用被封装的内容
调用被封装的内容有两种方式:通过对象直接调用和通过self间接调用。
通过对象直接调用
#通过对象直接调用object1对象的name和age属性
class Person: #创建类
def __init__(self,name,age): #__init__()方法称为类的构造方法,注意左右是两个英文下划线
self.name = name
self.age = age
object1 = Person('caroline',19) # 将'caroline'和19分别封装到object1及self的name和age属性
print(object1.name)
print(object1.age)
通过self间接调用
#通过self间接调用
class Person: #创建类
def __init__(self,name,age): #__init__()方法称为类的构造方法,注意左右是两个英文下划线
self.name = name
self.age = age
def detail(self): #通过self调用被封装的内容
print(self.name)
print(self.age)
object1 = Person('caroline',19)
object1.detail() #python将object1传给self参数,即object1.detail(object1),此时函数内部的self=object1
通过self间接调用时,python会默认将object1传给self参数,即object1.detail(object1),此时方法内部的self = object1。
面对对象的编程方法不会像平时编写程序一样按照执行流程去思考,在上述实例中,定义了一个Person类,通过各种函数定义Person的各种行为和特性,它拥有name和age两个属性,在调用过程中,让自己把自己打印出来。
2、继承
继承是以普通的类为基础建立专门的类对象。
实例讲解:
猫可以:喵喵叫、吃、喝、拉、撒
狗可以:汪汪叫、吃、喝、拉、撒
现在要分别为猫和狗创建一个类,就需要为猫和狗实现它们所有的功能,伪代码如下:
(伪代码是无法运行的,主要为了让大家体会意思。)
class 猫:
def 喵喵叫(self):
print ('喵喵叫')
def 吃(self):
# do something
def 喝(self):
# do something
def 拉(self):
# do something
def 撒(self):
# do something
class 狗:
def 汪汪叫(self):
print ('汪汪叫')
def 吃(self):
# do something
def 喝(self):
# do something
def 拉(self):
# do something
def 撒(self):
# do something
从上述伪代码可以看出,吃、喝、拉、撒是猫和狗共同的特征,完全可以不在代码中重复的编写,这里就想到了继承的思想!!!
可写成:
动物:吃喝拉撒
猫:喵喵叫,并继承动物的特性
狗:汪汪叫,并继承动物的特性
class Animal: #定义动物类
def eat(self):
print ("%s 吃 " %self.name)
def drink(self):
print ("%s 喝 " %self.name)
def shit(self):
print ("%s 拉 " %self.name)
def pee(self):
print ("%s 撒 " %self.name)
class Cat(Animal): #定义猫类,继承动物类
def __init__(self, name):
self.name = name
def cry(self):
print ('喵喵叫')
class Dog(Animal): #定义狗类,继承动物类
def __init__(self, name):
self.name = name
def cry(self):
print ('汪汪叫')
c1 = Cat('小黑猫') #调用猫类
c1.eat()
c1.cry()
d1 = Dog('小白狗') #调用狗类
d1.drink()
d1.cry()