python入门使用(六):面对对象编程的理解与实践

三种编程方式

初学者一般比较容易接受的编程方式是“面向过程编程”,因为这种方式是根据业务逻辑从上到下写代码,容易被理解接受。

随着时间的推移,出现了“函数式编程”,把某些功能封装到函数中,需要使用时直接调用即可,不用重复撰写,节省了大量时间。(函数式编程可见我的博客: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间接调用。

扫描二维码关注公众号,回复: 12070863 查看本文章

通过对象直接调用

#通过对象直接调用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()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45154565/article/details/109318954
今日推荐