首页 > 编程语言 > 详细

python基础-面向对象(一)概念的引入

时间:2020-12-07 15:55:53      阅读:39      评论:0      收藏:0      [点我收藏+]

先看需求:如何描述一条狗?一种是这条狗的独有特征(如名字,性别,类别),还有所有狗都有的行为(吃喝拉撒睡),如何实现呢,独有特征肯定用dict,行为当然是用函数来完成。

dog1={
    ‘name‘:‘旺财‘,
    ‘gender‘:‘母‘,
    ‘type‘:‘藏獒‘
}
person1={
    ‘name‘:‘alex‘,
    ‘gender‘:‘母‘,
    ‘type‘:‘人‘
}
def eat(dog):
    print(‘%s在吃屎‘%dog[‘name‘])
def jiao(dog):
    print(‘%s 在叫‘%dog[‘name‘])

jiao(dog1)

但是会有一个问题,人person1,他也可以调用狗的def eat(),def jiao()。如何避免这个问题呢?难道每次调用函数都用 if 判断?

其实根据函数的作用域,可以把函数放到一个大的函数里边,做成子函数,那么外部的人就调用不到了

person1 = {
    ‘name‘: ‘alex‘,
    ‘gender‘: ‘母‘,
    ‘type‘: ‘人‘
}


def dog():
    def eat(dog):
        print(‘%s在吃屎‘ % dog[‘name‘])

    def jiao(dog):
        print(‘%s 在叫‘ % dog[‘name‘])

    dog1 = {
        ‘name‘: ‘旺财‘,
        ‘gender‘: ‘母‘,
        ‘type‘: ‘藏獒‘,
        ‘eat‘: eat,
        ‘jiao‘: jiao
    }

    return dog1


dog()[‘jiao‘](dog())
dog()[‘eat‘](dog())

技术分享图片

 

 现在还有个问题,就是狗被写死了,名字,性别,类别等都被写死了!如何不写死,当然是根据用户的参数传入来写。

person1 = {
    ‘name‘: ‘alex‘,
    ‘gender‘: ‘母‘,
    ‘type‘: ‘人‘
}


def dog(name, gender, type):
    def eat(dog):  # 需要字典dog
        print(‘%s在吃屎‘ % dog[‘name‘])

    def jiao(dog):  # 需要字典dog
        print(‘%s 在叫‘ % dog[‘name‘])

    dog1 = {
        ‘name‘: name,
        ‘gender‘: gender,
        ‘type‘: type,
        ‘eat‘: eat,
        ‘jiao‘: jiao
    }

    return dog1


d1 = dog(‘旺财‘, ‘母‘, ‘藏獒‘)
d1[‘eat‘](d1)  # 注意,需要的参数是dict,传的参数是自己,返回的就是dog1的dict。

技术分享图片

 一般独有的特征会放到一个init初始化函数里面

代码就被优化成这样

person1 = {
    ‘name‘: ‘alex‘,
    ‘gender‘: ‘母‘,
    ‘type‘: ‘人‘
}


def dog(name, gender, type):
    def eat(dog):  # 需要字典dog
        print(‘%s在吃屎‘ % dog[‘name‘])

    def jiao(dog):  # 需要字典dog
        print(‘%s 在叫‘ % dog[‘name‘])

    def init(name,gender,type):
        dog1 = {
            ‘name‘: name,
            ‘gender‘: gender,
            ‘type‘: type,
            ‘eat‘: eat,
            ‘jiao‘: jiao
        }
        return dog1
    return init(name,gender,type)


d1 = dog(‘旺财‘, ‘母‘, ‘藏獒‘)
d1[‘eat‘](d1)  # 注意,需要的参数是dict,传的参数是自己,返回的就是dog1的dict。

从上面可以看出来:

1.类:是具有相同属性的一类实物的集合。

2.对象:对象是类当中具体的某个物体。

再来一个需求:如何描述一个学校?特征(名字,地址,私立还是公立),动作(招生,考试),根据上面的例子代码应该可以一步到位了。

def school(name,addrs,type):
    def init(name,addrs,type):
        school1={
            ‘name‘:name,
            ‘addrs‘:addrs,
            ‘type‘:type,
            ‘zhaosheng‘:zhaosheng,
            ‘kaoshi‘:kaoshi
        }
        return school1
    def zhaosheng(school):
        print(‘%s学校正在招生‘%school[‘name‘])
    def kaoshi(school):
        print(‘%s学校正在考试‘%school[‘name‘])
    return init(name,addrs,type)

school1=school(‘北大‘,‘北京‘,‘私立‘)[‘kaoshi‘](school(‘北大‘,‘北京‘,‘私立‘)) #传的是自己self

上面用函数def完成了一个类,说明

面向对象设计:是将一类具体实物的数据和动作整合到一起。不一定非得用Class,用函数def也可以实现

面向对象编程:用Class+实例/对象的方法去实现面向对象设计。如C++有很多class

 

python基础-面向对象(一)概念的引入

原文:https://www.cnblogs.com/liaoyifu/p/14096409.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!