首页 编程教程正文

面向对象设计思路的形成过程(def方式)

piaodoo 编程教程 2020-02-22 22:17:12 1557 0 python教程

本文来源吾爱破解论坛

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

情景

学校具有开展考试、进行招生等功能,而狗不具备这些能力,医院也没有这些功能,那么在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)
结语

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

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/8111.html

搜索