派生、封装、property伪装属性、多态、反射

本文介绍了Python面向对象编程的四个关键概念:派生方法的实战,包括如何避免序列化时的错误;封装的原理与实例,强调提供接口查看和修改数据;property伪装属性的使用,简化方法调用;多态的解释及实例,特别是鸭子类型的体现;最后,探讨了反射的概念和主要方法,包括判断用户输入是否合法的操作。
摘要由CSDN通过智能技术生成

派生方法的实战演练

序列化字典

import json
import datetime

d = {
   't1':datetime.datetime.today(),
     't2':datetime.date.today()
     }
res = json.dumps(d)
print(res )  # 报错 TypeError: Object of type 'datetime' is not JSON serializable

1. 原因:json序列化python数据类型是有限的,不是所有类型都可以
2.可以被json序列化的有:字典、列表、元组、字符串、整型、浮点型、布尔型(true、false、none)
	ps:即将要被序列化的数据,里里外外都必须是上述类型才可以

将上述字典在不报错的情况下序列化

方式一

手动将不符合数据类型要求的数据转成符合要求的

d = {
   't1':str(datetime.datetime.today()),
     't2':str(datetime.date.today())
     }
res = json.dumps(d)
print(res )  # {"t1": "2022-07-28 14:50:01.971910", "t2": "2022-07-28"}

方式二

用派生的方式

1.查看dumps源码
def dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True,
        allow_nan=True, cls=None, indent=None, separators=None,
        default=None, sort_keys=False, **kw)
2.找到 cls = None,默认形参
if cls is None:
    cls = JSONEncoder
return cls(
    skipkeys=skipkeys, ensure_ascii=ensure_ascii,
    check_circular=check_circular, allow_nan=allow_nan, indent=indent,
    separators=separators, default=default, sort_keys=sort_keys,
    **kw).encode(obj)
>>>默认是调用JSONEncoder类,并且产生obj对象调用JSONEncoder类里面的encode()方法
3.在JSONEncoder类中,有default方法,发现与我们之前报错信息一致,说明报错是default方法触发的
def default(self, o):
    raise TypeError("Object of type '%s' is not JSON serializable" %
                    o.__class__.__name__)
4. 我们如果想要避免报错,那么需要对default方法做出修改
d = {
   't1':datetime.datetime.today(),
     't2':(datetime.date.today())
     }

class My_JSONEncoder(json.JSONEncoder):
    def default(self, o):  # o是json即将要序列化的数据
        if isinstance(o,datetime.datetime):
            return o.strftime("%Y-%m-%d %X")
        elif isinstance(o,datetime.date):
            return o.strftime("%Y-%m-%d")
        return 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值