python的面向对象-面向对象设计

1、面向对象设计

def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法
    #学校动作
    def kaoshi(school):
        print("[%s]学校正在考试" %school["name"])
    def zhaosheng(school):
        print("[%s]学校[%s]正在招生" %(school["type"],school["name"]))
    #学校特征
    sch = {
        "name": name,
        "addr": addr,
        "type": type,
        "kaoshi":kaoshi,
        "zhaosheng":zhaosheng,
    }
    return sch#返回的是一个字典里面包含特征和kaoshi zhaosheng的内存地址
s1=school("清华","北京","公立")#运行school这个大函数,把返回值的字典赋值给s1
print(s1)
s1["kaoshi"](s1)#运行kaoshi这个函数,把s1自己作为参数穿进去,取值到kaoshi是s1["kaoshi"]加()就是运行函数
s2=school("北大","北京","公立")
print(s2)
s2["zhaosheng"](s2)

 
C:python35python3.exe D:/pyproject/day24/面向对象设计学习.py

{'zhaosheng': <function school.<locals>.zhaosheng at 0x0000000000B22400>, 'type': '公立', 'kaoshi': <function school.<locals>.kaoshi at 0x0000000000B22378>, 'addr': '北京', 'name': '清华'}

[清华]学校正在考试

{'zhaosheng': <function school.<locals>.zhaosheng at 0x0000000000B22510>, 'type': '公立', 'kaoshi': <function school.<locals>.kaoshi at 0x0000000000B22488>, 'addr': '北京', 'name': '北大'}

[公立]学校[北大]正在招生

2、定义一个init初始化函数,但是不够好,

def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法
    #学校动作
    def kaoshi(school):
        print("[%s]学校正在考试" %school["name"])
    def zhaosheng(school):
        print("[%s]学校[%s]正在招生" %(school["type"],school["name"]))
    #学校特征
    def init(name,addr,type):
        sch = {
            "name": name,
            "addr": addr,
            "type": type,
            "kaoshi": kaoshi,
            "zhaosheng": zhaosheng,
        }
        return sch#返回的是一个字典里面包含特征和kaoshi zhaosheng的内存地址
    res=init(name,addr,type)#上面定义了3个子函数,但是没有运行,res是在运行init
    return res#然后把字典这个结果作为school这个大函数的返回值
s1=school("清华","北京","公立")#运行school这个大函数,把返回值的字典赋值给s1
s1["kaoshi"](s1)#运行kaoshi这个函数,把s1自己作为参数穿进去,取值到kaoshi是s1["kaoshi"]加()就是运行函数
s2=school("北大","北京","公立")
s2["zhaosheng"](s2)

C:python35python3.exe D:/pyproject/day24/面向对象设计学习.py

[清华]学校正在考试

[公立]学校[北大]正在招生

3、可以把上面的res这2行合并为一行

运行school函数,把3个def子函数加载到内存中,然后运行init初始化函数,把结果(结果是一个字典)作为school的返回值返回

def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法
    #学校动作
    def kaoshi(school):
        print("[%s]学校正在考试" %school["name"])
    def zhaosheng(school):
        print("[%s]学校[%s]正在招生" %(school["type"],school["name"]))
    #学校特征
    def init(name,addr,type):
        sch = {
            "name": name,
            "addr": addr,
            "type": type,
            "kaoshi": kaoshi,
            "zhaosheng": zhaosheng,
        }
        return sch#返回的是一个字典里面包含特征和kaoshi zhaosheng的内存地址
    return init(name,addr,type)
s1=school("清华","北京","公立")#运行school这个大函数,把返回值的字典赋值给s1
s1["kaoshi"](s1)#运行kaoshi这个函数,把s1自己作为参数穿进去,取值到kaoshi是s1["kaoshi"]加()就是运行函数
s2=school("北大","北京","公立")
s2["zhaosheng"](s2)

C:python35python3.exe D:/pyproject/day24/面向对象设计学习.py

[清华]学校正在考试

[公立]学校[北大]正在招生

4、上面这样还不够好,因为init初始化函数一般都是放在最前面的,我们开始的时候放在前面会报错,因为找不到kaoshi和zhaosheng,现在放在前面是可以的了,因为def只是定义函数,并没有运行,到最下面的时候运行的时候这时候zhaosheng和kaoshi已经加载到内存中了

def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法
    def init(name,addr,type):#初始化
        sch = {
            "name": name,
            "addr": addr,
            "type": type,
            "kaoshi": kaoshi,
            "zhaosheng": zhaosheng,
        }
        return sch#返回的是一个字典里面包含特征和kaoshi zhaosheng的内存地址
    #学校动作
    def kaoshi(school):
        print("[%s]学校正在考试" %school["name"])
    def zhaosheng(school):
        print("[%s]学校[%s]正在招生" %(school["type"],school["name"]))
    #学校特征
    return init(name,addr,type)
s1=school("清华","北京","公立")#运行school这个大函数,把返回值的字典赋值给s1
s1["kaoshi"](s1)#运行kaoshi这个函数,把s1自己作为参数穿进去,取值到kaoshi是s1["kaoshi"]加()就是运行函数
s2=school("北大","北京","公立")
s2["zhaosheng"](s2)

C:python35python3.exe D:/pyproject/day24/面向对象设计学习.py

[清华]学校正在考试

[公立]学校[北大]正在招生

5、面向对象编程就是用class独特的语法去实现面向对象设计

#用面向对象编程独有的语法class去实现面向对象设计

class Dog:
    def __init__(self,name,gender,type):
        self.name=name
        self.gender=gender
        self.type=type
    def bark(self):
        print('一条名字为[%s]的[%s],狂吠不止' %(self.name,self.type))
    def yao_ren(self):
        print('[%s]正在咬人' %(self.name))
    def chi_shi(self):
        print('[%s]正在吃屎' %(self.type))
dog1=Dog('beiye','female','京巴')
print(dog1.__dict__)

 
{'gender': 'female', 'type': '京巴', 'name': 'beiye'}
原文地址:https://www.cnblogs.com/gouguoqilinux/p/9190514.html