首页 > 编程语言 > 详细

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

时间:2020-12-07 15:55:53      阅读:32      评论: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 版权所有
打开技术之扣,分享程序人生!