Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- Decorator що рахує кількість екземплярів
- def decor_cl(cl):
- count = 0
- class Wrapper:
- def __init__(self, *args):
- print(args)
- nonlocal count
- count += 1
- print("%%", count) #print in file
- self.wrapper = cl(*args)
- def __getattr__(self, item):
- return getattr(self.wrapper, item)
- return Wrapper
- # def __get__(self, instance, owner):
- # return instance
- def main_func(classobj):
- return decor_cl(classobj)
- C = main_func(C)
- '''
- ##############################################
- '''
- Змінює формат доступу до атрибуту
- class A:
- attr1 = None
- def __init__(self):
- self.attr1 = 6
- pass
- def attrsetter(self, value):
- self.attr1 = value
- def attrgetter(self, name):
- return self.attr1
- def func(cl, attrname):
- setattr(cl, attrname, property(fset=attrsetter, fget=attrgetter))
- func(A, 'attr')
- '''
- ################################
- '''
- Знайти усі дискриптори класу
- def isdescriptor(cls):
- names = ["__get__", "__set__", "__delete__"]
- for name, obj in inspect.getmembers(cls):
- if name in names:
- return True
- return False
- def get_descriptors():
- descriptors = list()
- for name, obj in inspect.getmembers(sys.modules[__name__]):
- if inspect.isclass(obj) and isdescriptor(obj):
- descriptors.append(obj)
- return descriptors
- descriptors = get_descriptors()
- def foo(cls):
- for name in cls.__dict__:
- for descr in descriptors:
- if isinstance(cls.__dict__[name], descr):
- print("descr", name)
- foo(A)
- '''
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement