首页 > 其他分享 >高端玩法之类的装饰器的应用

高端玩法之类的装饰器的应用

时间:2024-08-06 10:08:34浏览次数:10  
标签:__ obj 高端 self 玩法 dict key 装饰 def

一、类的装饰器:

def deco(obj):
    obj.x=2
    obj.y=3
    return obj
@deco
class Foo:
    pass

print(Foo.__dict__)

二、类的装饰器增强版

def deco(**kwargs):
    def warpper(obj):
       for key,value in kwargs.items():
           setattr(obj,key,value)
       return obj
    return warpper

@deco(x=1,y=2)
class Foo:
    pass

@deco(name='jack')
class Bar:
    pass
print(Foo.__dict__)
print(Bar.__dict__)
输出结果:
D:\python\python.exe D:/software/project/描述符.py
{'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Foo' objects>, '__weakref__': <attribute '__weakref__' of 'Foo' objects>, '__doc__': None, 'x': 1, 'y': 2}
{'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Bar' objects>, '__weakref__': <attribute '__weakref__' of 'Bar' objects>, '__doc__': None, 'name': 'jack'}

Process finished with exit code 0

三、类的装饰器结合描述符的应用

def deco(**kwargs):
    def warpper(obj):
        for key,value in kwargs.items(): #((name,str),(age,int),(salary,float))
            setattr(obj,key,Typed(key,value))
        return obj
    return warpper

class Typed:
    def __init__(self,key,own_type):
        self.key=key
        self.own_type=own_type
    def __get__(self, instance, owner):
        return instance.__dict__[self.key]
    def __set__(self, instance, value):
        if not isinstance(value,self.own_type):
            raise TypeError('%s输入的类型不是%s' %(self.key,self.own_type))
        instance.__dict__[self.key]=value
    def __delete__(self, instance):
        return instance.__dict__.pop(self.key)

@deco(name=str,age=int,salary=float)
class People:
    # name=Typed('name',str)
    def __init__(self,name,age,salary,gender):
        self.name=name
        self.age=age
        self.salary=salary
        self.gender=gender

p=People('jack',20,30.6,'男')
p.age=30
del p.age
print(p.__dict__)

上面的代码看着很牛逼,实际上也很牛逼。能看懂就行,不必非要掌握,一般用不到。

标签:__,obj,高端,self,玩法,dict,key,装饰,def
From: https://www.cnblogs.com/kkbest/p/18342200

相关文章

  • AI绘画最强SD(Stable Diffusion)玩法实操教学案例及商业变现项目分享
    AI绘画现在越来越火爆了,很多人无论大人小孩都在玩,还有的很多电商老板也在使用辅助生成产品主图和详情页,可以说是非常的实用。而其中最让人追捧和好评的就是SD(StableDiffusion)这款AI绘图软件了,StableDiffusion是一款基于深度学习的图像生成工具,它可以根据文本描述生成高质......
  • 高端玩法之描述符的应用,描述符的优先级
    什么是描述符,故名思义就是用来描述一个对象的。你记住一个概念,在python中一切皆对象(Linux中一切皆文件)。所以类也是一个对象,描述符本身也是一个类,这个类是用来描述另外一个类的。语法特点:描述的是另一个类属性,注意只能是类的属性,不可以加在构造函数中(__init__就是构造函数)。描述......
  • 使用TaskDecorator装饰器实现再线程隔离下的数据复制
    自定装饰器importorg.slf4j.MDC;importorg.springframework.core.task.TaskDecorator;importjava.util.Map;publicclassComTaskDecoratorimplementsTaskDecorator{@OverridepublicRunnabledecorate(Runnablerunnable){//主线程可执行的代......
  • 高端网络建站设计类公司网站pbootcms模板(自适应手机端)
    (自适应手机端)响应式高端网络建站设计类公司网站模板PbootCMS内核开发的网站模板,该模板适用于建站公司网站、网络公司网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;自适应手机端,同一个后台,数据即时同步,简单适用!附带测试数据!友好的seo,所有页面均都能完......
  • Python中类的三种重要装饰器
    Python中类的三种重要装饰器:classmethod、staticmethod和property。这些装饰器用于定义不同类型的方法和属性,能大大增强类的功能和灵活性。一、classmethod装饰器1.什么是classmethod?classmethod装饰器用于将一个方法绑定到类上,而不是实例上。换句话说,通过classm......
  • Python装饰器
    Python装饰器TableofContents引子函数式调用语法糖加上参数login函数有参数装饰器本身有参数装饰有返回值的函数多个装饰器灵活运用想理解Python的装饰器,首先要知道在Python中函数也是一个对象,所以可以:将函数赋值给变量将函数当做参数返回一个函数......
  • 为什么 functools.cache 装饰器不能在我的带有记忆功能的斐波那契序列函数上工作?
    我在python中搞乱了记忆,并使用了一个示例斐波那契序列函数作为模型。我将第一个fibonacci()函数编写为常规函数,无需记忆,它按预期工作。接下来,我编写了我的fibonacci_memo()函数,该函数使用带有输出的输入字典来利用记忆化,并且按预期工作。然后我想测试functo......
  • python装饰器
    一前言环境:win10python3.10二函数中的函数如果定义了一个函数A,现在想在不影响函数A原先功能的情况下,新增加一些额外的功能,怎么办,下面是一个例子如上,本来原先执行test_except那句话只会打印over那句话,但现在执行test_except却会输出一些另外的东西这其中有个巧妙地东西就......
  • Python入门知识点 10--闭包与装饰器
    一、直接与间接程序开发潜规则生活中:   有台电脑,他的硬盘空间不够了,里面的资料我不能动,也不能删,咋办   1.加装硬盘--直接解决--前提是我的电脑能加装   2.插个u盘--间接解决-->没有特别的要求,比较灵活   开发潜规则:   代码拓展-->开放-->可......
  • 装饰大师——装饰模式(Java实现)
    引言大家好,上期我们介绍了装饰模式在Python中的实现,今天,我们将继续探讨装饰模式,并展示如何在Java中实现它。装饰模式概述装饰模式的核心思想是将功能附加到对象上,而不是通过继承来实现,这种模式包含以下几个关键组成部分:组件接口:定义基本功能;具体组件:实现基本功能的类;装......