• 封装与组合


    继承json模块并派生新的功

    继承json 模块中JSONEncoder,并派生出新的功能

    本身json只能转化七大数据类型,如果转化对象是对象,将报错

    default方法就是出现不能转化的就会报错,继承原父类功能,想更改其中一个函数

    命名相同,添加if筛选,并且最终返回相应函数

    import datetime,json
    
    
    class MyJson(json.JSONEncoder):
        def default(self, o):
            if isinstance(o,datetime.datetime):
                return datetime.datetime.strftime(o,'%Y-%m-%d %X')
            else:
                return super().default(self,o)#其他数据类型直接返回原函数
    dict1= {'time':datetime.datetime.now()}
    
    res = json.dumps(dict1)
    print(res)
    print(type(res))
    
    

    组合

    组合:一个对象中包含另一个或多个对象,从而减少代码冗余

    继承:继承是类与类的关系,子类继承父类属性与方法,子类与父类使用中从属关系

    组合:组合是对象与对象的关系,一个对象拥有另一个对象的属性或方法,什么有什么的关系

    class People:
        def __init__(self,name,age,sex):
            self.name= name
            self.age = age
            self.sex = sex
    
    class Teacher(People):
        def __init__(self,name,age,sex):
            super().__init__(name,age,sex)
    
    
    class  Student(People):
        def __init__(self,name,age,sex):
            super().__init__(name,age,sex)
    
    class Date:
        def __init__(self,year,mouth,day):
            self.year = year
            self.mouth =mouth
            self.day = day
        def tell_birth(self):
            print(f"""
            出生年月日
            年:{self.year}
            月:{self.mouth}
            日:{self.day}
            """)
    
    stu1 = Student('TYS',18,'MAN')
    date_obj = Date(1993,5,31)
    stu1.date_obj = date_obj
    stu1.date_obj.tell_birth()
    

    组合练习

    练习需求:

    选课系统:

    1.有学生、老师类,学生与老师有属性 “名字、年龄、性别、课程”,

    2.有方法 老师与学生可以添加课程, 打印学习/教授课程。

    #创建父类,包含共有的特性姓名,年龄,性别,课程(添加课功能,打印课程表)
    class People:
        def __init__(self,name,age,sex):
            self.name = name
            self.age = age
            self.sex = sex
        def add_course(self,course_obj):
            self.course_list.append(course_obj)
        def tell_all_course_info(self):
            for course_obj in self.course_list:
                course_obj.tell_course_info()
    #建立学生类
    class Student(People) :
        def __init__(self,name,age,sex):
            super().__init__(name,age,sex)
            self.course_list=[]
    #建立老师类
    class Teacher(People) :
        def __init__(self,name,age,sex):
            super().__init__(name,age,sex)
            self.course_list=[]
    #建立课程类包含,课程表的属性,打印课程标的功能
    class Course:
        def __init__(self,course_name,course_price,course_time):
            self.course_name = course_name
            self.course_price = course_price
            self.course_time = course_time
        def tell_course_info(self):
            print(f"""
            ======课程信息如下======
            课程名称:{self.course_name}
            课程价格:{self.course_price}
            课程周期:{self.course_time}
            """)
    
    #创建学生对象
    stu1 = Student('TIAN',18,'MAN')
    
    #创建课程对象
    python_obj = Course('Python',111,6)
    
    #学生对象添加课程对象
    stu1.add_course(python_obj)
    
    stu1.tell_all_course_info()
    

    封装

    封装:把属性和功能封装在对象中

    对象好比一个袋子,可以存放一堆属性和方法

    存不是目的,目的是为了取,可以通多 对象. 的方式获取属性或方法

    封装的目的:可以通过 对象. 的方法存放、获取属性或方法方便数据的存取

    如何封装,类实例化,往对象传参

    访问限制机制

    访问限制机制:在类内部定义的变量名,函数名前边带有__ 的会被限制外部不能直接访问该属性原型,

    其实是改变成: _类名__属性|方法

    将一些隐私的数据隐藏起来,不让外部轻易获取、

    可以将一堆数据封装成一个接口,可以让用户调用接口,并且通过相应的逻辑,最后再将数据返回给用户

    class ATM:
        def __insert_card(self):
            print('开始插卡')
        def __input_pwd(self):
            print('输入密码')
        def __input__bal(self):
            print('输入金额')
        def __output_money(self):
            print('开始出钞')
        def __print_flow(self):
            print('打印流水')
    
        def withdraw(self):
            self.__insert_card()
            self.__input_pwd()
            self.__input__bal()
            self.__output_money()
            self.__print_flow()
    obj = ATM()
    
    obj.withdraw()
    
    

    property

    property:是一个装饰器,可以装饰在类内部的方法上,使其调用时无需加( )
    在某些情况下调用的方法只是为了或取方法计算后的值,去掉( )后
    让方法看起来像调用属性
    
  • 相关阅读:
    服务器控件的 ID,ClientID,UniqueID 的区别
    GridView使用总结
    javascript对象
    如何对SQL Server 2005进行设置以允许远程连接(转载)
    Master Pages and JavaScript document.getElementById
    Linux paste命令
    linux脚本和代码的加密
    SDWAN的优势
    dsd
    ASA防火墙忘记密码之后的恢复步骤
  • 原文地址:https://www.cnblogs.com/fxsm/p/11945015.html
Copyright © 2020-2023  润新知