,python-3.x"/>

首页 > 解决方案 > 如何通过其方法获取类对象?,尝试使用 dir() 和 __class__,但它输出

问题描述

如何通过其方法获取类对象?,尝试使用 dir() 和class,但它输出。我想使用元类将classmethod函数更改为装饰函数

def async_time_track(func):
    # @functools.wraps(func)
    async def wrapper_async(*args, **kwargs):
        now = time.time()
        print('async TIME ARGS', args, )
        res = await func(*args, **kwargs)
        end = time.time() - now
        execute_time = f'{"Executed time"} {end} s'
        print(execute_time)
        return res

    return wrapper_async



class MyMeta(type):

    def __new__(mcs, name, bases, attrs, **kwargs):

        for key, val in attrs.items():
            if inspect.ismethoddescriptor(val):
                setattr(val, '__wrapped__', async_time_track(getattr(val,'__wrapped__')))

    new_cls = super().__new__(mcs, name, bases, attrs, **kwargs)
    return new_cls



class MyClass4(metaclass=MyMeta):

@classmethod
async def statis(cls):
    await asyncio.sleep(1)


Traceback (most recent call last):
  File "C:\Users\taima\PycharmProjects\AsyncVkAccount\tests\my_test\metaclasses2.py", line 159, in <module>
    class MyClass4(metaclass=MyMeta):
  File "C:\Users\taima\PycharmProjects\AsyncVkAccount\tests\my_test\metaclasses2.py", line 105, in __new__
    setattr(val, '__wrapped__', async_time_track(getattr(val, '__wrapped__')))
AttributeError: readonly attribute

标签: python-3.x

解决方案


推荐阅读