python 25 类装饰器

# python 类装饰器
# /usr/sbin/py/python
# -*=coding:utf8-*-

def dec(obj):
    obj.hobby = "singing" # 添加类属性
    return  obj


# 加任意参数
def type(**kwargs):
    def deco(obj):
        for key,val in kwargs.items():
            # obj.key = val
            setattr(obj,key,val)
        return obj

    return deco

@type(school="实验小学",address="上海")  # 分析 type方法返回值是deco方法 等价于 @deco 》》 Student = deco(Student)
class Student:
    pass

print(Student.__dict__)

# 利用装饰器 实现参数类型限制
class Type:
    def __init__(self,key,parameterType):
        self.key = key
        self.parameterType = parameterType

    def __get__(self, instance, owner):
        return instance.__dict__[self.key]

    def __set__(self, instance, value):
        if isinstance(value,self.parameterType):
            instance.__dict__[self.key] = value
        else:
            raise TypeError("参数类型错误",value,self.parameterType)


def checkType(**kwargs):
    def deco(obj):
        for key,val in kwargs.items():
            setattr(obj,key,Type(key,val))
        return  obj
    return deco

@checkType(name=str,age=int,salary=float)
class Teacher:
    def __init__(self,name,age,salary):
        self.name = name
        self.age = age
        self.salary = salary


print(Teacher.__dict__)
# 'name': <__main__.Type object at 0x0397A3E8>,
# 'age': <__main__.Type object at 0x0397A418>, 'salary': <__main__.Type object at 0x0397A448>
# 参数被赋予了描述符
t1 = Teacher("jake",34,99.9)
print(t1.__dict__) # {'name': 'jake', 'age': 34, 'salary': 99.9}
t2 = Teacher("tom","error",90)  # 报错
print(t2.__dict__)
#  File "D:/pythonProject/methodPy/test15.py", line 39, in __set__
#     raise TypeError("参数类型错误",value,self.parameterType)
# TypeError: ('参数类型错误', 'error', <class 'int'>)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值