吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2111|回复: 12
收起左侧

[Python 转载] 面向对象设计思路的形成过程(def方式)

[复制链接]
Westphalia 发表于 2020-2-16 09:29

初来吾爱,这里转载一篇我在其他博客网站的文章。首先需要声明的是,本文并不是讲面向对象编程,只是讲面向对象设计的思路。

情景

学校具有开展考试、进行招生等功能,而狗不具备这些能力,医院也没有这些功能,那么在Python中,如何只让学校调用这些功能,而其他东西无法实现呢?如何做到只面向学校这一类呢?

思路

版本一,将某个学校和函数中输出内容完全固定

school = {
    'name': 'UIR',
    'addr': 'Beijing', 
    'types': 'Public School',  # 以上三个为学校的属性
}

def exam():
    print('%s %s %s is having exams' % (school['addr'], school['types'], school['name']))

def recruit():
    print('%s %s %s is recruiting students' % (school['addr'], school['types'], school['name']))

# 让学校开始考试
exam(school)
# 让学校开始招生
recruit(school)

版本二,函数中可以传参,可以传入不同的学校,但是也可以传入猫、司机、公寓等和学校不是同一类的参数

school = {
    'name': 'UIR',
    'addr': 'Beijing',
    'types': 'Public School',  # 以上三个为学校的属性
}

def exam(n):
    print('%s %s %s is having exams' % (n['addr'], n['types'], n['name']))

def recruit(n):
    print('%s %s %s is recruiting students' % (n['addr'], n['types'], n['name']))

# 让学校开始考试
exam(school)
# 让学校开始招生
recruit(school)

版本三,用作用域进行限制,只有学校这一类才能进行考试、招生等功能,但是学校被固定住了

def school():
    def exam(xuexiao):
        print('%s %s %s is having exams' % (xuexiao['addr'], xuexiao['types'], xuexiao['name']))

    def recruit(xuexiao):
        print('%s %s %s is recruiting students' % (xuexiao['addr'], xuexiao['types'], xuexiao['name']))

    xuexiao = {   #这里学校需定义在两个函数的后面,因为这里面用到了到前两个函数
        'name': 'UIR',
        'addr': 'Beijing',
        'types': 'Public School',  # 以上三个为学校的属性
        'exam': exam,
        'recruit': recruit  # 以上两个为学校的功能
    }
    return xuexiao

n = school()
# 取出学校的名字
print(n['name'])
# 让学校开始考试
n['exam'](n)

版本四,在版本三的基础上,只需在school函数中传入不同的值,就换成不同的学校

def school(name, addr, types):
    def exam(xuexiao):
        print('%s %s %s is having exams' % (xuexiao['addr'], xuexiao['types'], xuexiao['name']))

    def recruit(xuexiao):
        print('%s %s %s is recruiting students' % (xuexiao['addr'], xuexiao['types'], xuexiao['name']))

    xuexiao = {
        'name': name,
        'addr': addr,
        'types': types,  # 以上三个为学校的属性
        'exam': exam,
        'recruit': recruit  # 以上两个为学校的功能
    }
    return xuexiao

n = school('UIR', 'Beijing', 'Public School')
# 取出学校的名字
print(n['name'])
# 让学校开始考试
n['exam'](n)

版本五, 多定义一个初始化函数,初始化一个学校

def school(name, addr, types):
    def exam(xuexiao):
        print('%s %s %s is having exams' % (xuexiao['addr'], xuexiao['types'], xuexiao['name']))

    def recruit(xuexiao):
        print('%s %s %s is recruiting students' % (xuexiao['addr'], xuexiao['types'], xuexiao['name']))

    def init(name, addr, types):  # 这里可以把init函数移到最前面,因为读到最后一个return的时候,前两个函数已经读过了
        xuexiao = {
            'name': name,
            'addr': addr,
            'types': types,  # 以上三个为学校的属性
            'exam': exam,
            'recruit': recruit  # 以上两个为学校的功能
        }
        return xuexiao

    res = init(name, addr, types)
    return res  # 或者这两步直接写成return init(name, addr, types)

n = school('UIR', 'Beijing', 'Public School')
# 取出学校的名字
print(n['name'])
# 让学校开始考试
n['exam'](n)

结语

类是一种数据结构,对象(实例)从类中产生。以上便是面向对象设计思路的形成过程。

免费评分

参与人数 2吾爱币 +4 热心值 +2 收起 理由
shi128862 + 1 + 1 热心回复!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

运维穷屌丝 发表于 2020-2-23 10:30
Westphalia 发表于 2020-2-22 22:48
希望对你有帮助!谢谢

在.pyenv/cache存放了python3.6.5.tar.xz文件,再执行pyenv install 3.6.5,提示没有这版本,离线安装失败啊
 楼主| Westphalia 发表于 2020-2-18 14:30
青蛙考拉 发表于 2020-2-16 12:31
面向对象这东西一直没搞懂,导致学习各种编程语言,一到面向对象我就弃学啦

希望这个帖子能帮到你,一起加油!
青蛙考拉 发表于 2020-2-16 12:31
面向对象这东西一直没搞懂,导致学习各种编程语言,一到面向对象我就弃学啦
运维穷屌丝 发表于 2020-2-16 13:58
感谢吾爱有你!
运维穷屌丝 发表于 2020-2-22 17:04
感谢吾爱有你!
 楼主| Westphalia 发表于 2020-2-22 22:48

希望对你有帮助!谢谢
meishao 发表于 2020-2-23 10:50
吾爱破解论坛有你更精彩!
xie8xie 发表于 2020-2-25 21:08
谢谢分享!学习中……
xiapj 发表于 2020-2-25 21:40
很感谢分享,在学习中
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 03:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表