python通过装饰类装饰类下所有方法(1)

本文介绍了如何使用Python装饰类来装饰类下的所有方法,包括装饰特定函数名的函数,并探讨了带有参数的装饰器。通过示例代码展示了装饰类在函数调用前的数据处理应用,同时预告了后续章节将涉及更全面的功能,如异常捕获和参数干预。

废话不多说,直接上源码。注:下面方法只对类下函数调用前做一些数据处理,下一章补充函数前后数据处理,所有函数异常捕获,干预函数传参等

def outer(myclass):    
    class Inner(myclass):
        def __getattribute__(self, item):
            x = super().__getattribute__(item) #  调用父类的getattribute方法
            print('这里可以写入你的功能函数')         
            return x
    return Inner   

@outer
class MyClass: # 目标类,通过装饰MyClass来装饰类下面所有方法
	def func_name(self, name):
		print('my name is %s'%name)
	def func_age(self, age)
		print('my age is %s'age)
MyClass().func_name('wang')
MyClass().func_age('12')
==================================================================================
>>>这里可以写入你的功能函数
>>>my name is wang
>>>这里可以写入你的功能函数
>>>my age is 12
>==================================================================================
思考1 : 通过以上代码装饰类下每一个方法基本实现

当我们获取类属性时也会触发

@outer
class MyClass: # 目标类,通过装饰MyClass来装饰类下面所有方法
	school = 'beijing university'
	def func_name(self, name):
		print('my name is %s'%name)
	def fun_age(self, age)
		print('my age is %s'%age)
print(MyClass().school)
print(MyClass.school)
===================================================================================
>>>这里可以写入你的功能函数
>>>beijing university
>>>>beijing university
思考2:装饰指定函数名开头或者结尾的函数
def outer(myclass):    
    class Inner(myclass):
        def __getattribute__(self, item):
            x = super().__getattribute__(item) #  调用父类的getattribute方法
            if x.__name__.startswith('func_name')
            	print('这里可以写入你的功能函数')
            elif x.__name__.startswith(func_name)        
            return x
    return Inner   

@outer
class MyClass: # 目标类,通过装饰MyClass来装饰类下面所有方法
	def func_name(self, name):
		print('my name is %s' % name)
	def fun_age(self, age):
		print('my age is %s' % age)
	def func_addr(self, addr):
		print('my addr is %s' % addr)
MyClass().func_name('wang')
MyClass().func_age('12')
MyClass().func_addr('shenzhen')
==================================================================================
>>>这里可以写入你的功能函数
>>>my name is wang
>>>my age is 12
>>>这里可以写入你的功能函数
>>>my addr is shenzhen
思考3:有参数的装饰器
def outer(scop, name=None):
    def mid(cla):
        if scop != "class":
            print('name')
            return cla
        else:
            class Inner(cla):
                def __getattribute__(self, item):
                    x = super().__getattribute__(item)
                    print('222222')
                    print(x.__name__)
                    return x
            return Inner
    return mid


@outer(scop=1)
class Myclass:
    def name(self):
        print('11111')
Myclass().name()
>>> name
>>> 11111

下一章:python通过装饰类装饰类下所有方法(2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值