在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python  網(wǎng)絡(luò)安全/ python 元類如何解決 set get 問題?

python 元類如何解決 set get 問題?

https://www.codewars.com/kata...

這個(gè)上面的問題,如何解決解決?
調(diào)用參數(shù)可以在類生成的時(shí)候 裝飾一下,但是成員訪問,復(fù)寫了 __get____set__ 方法好像沒有效果

回答
編輯回答
忘了我
from functools import wraps
import time

class Debugger(object):
    attribute_acceses = []
    method_calls = []
  
  
def wrap(f):
    @wraps(f)
    def new_func(*args, **kwargs):
        start = time.time()
        ret = f(*args, **kwargs)
        Debugger.method_calls.append({
            'class': type(args[0]),
            'method': f.__name__,
            'args': args,
            'kwargs': kwargs,
            'time': time.time()-start
        })
        return ret
    return new_func


class Meta(type):
    def __new__(meta_cls, cls_name, cls_parent, cls_attr):
        for k, v in cls_attr.items():
            if callable(v):
                cls_attr[k] = wrap(v)
            
        def __getattribute__(self, name):
            value = super(cls, self).__getattribute__(name)
            Debugger.attribute_acceses.append({
                'action': 'get',
                'class': type(self),
                'attribute': name,
                'value': value # actual value
            })
            return value
            
        cls_attr['__getattribute__'] = __getattribute__
        
        def __setattr__(self, name, value):
            Debugger.attribute_acceses.append({
                'action': 'set',
                'class': type(self),
                'attribute': name,
                'value': value
            })
            return super(cls, self).__setattr__(name, value)
            
        cls_attr['__setattr__'] = __setattr__
            
        cls = type.__new__(meta_cls, cls_name, cls_parent, cls_attr)
        
        return cls
2018年9月16日 07:22