Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- from copy import deepcopy
- from types import MethodType
- class ClassBuilder(object):
- def __init__(self, class_name, base_class_collection=(object,)):
- self.class_name = class_name
- self.base_class_collection = base_class_collection
- self.class_attributes = dict()
- self.class_functions = dict()
- self.instance_attributes = dict()
- self.instance_functions = dict()
- def __build_init_function(self):
- def __init_function__(instance_self):
- # Add attributes
- for attr_name, attr_value in list(self.instance_attributes.items()):
- if isinstance(attr_name, str) and len(attr_name) > 0:
- setattr(instance_self, attr_name, deepcopy(attr_value))
- # Add functions
- for method_name, funct in list(self.instance_functions.items()):
- if isinstance(method_name, str) and len(method_name) > 0 and\
- hasattr(funct, '__call__'):
- method = MethodType(funct, instance_self)
- setattr(instance_self, method_name, method)
- return __init_function__
- def build(self):
- self.class_attributes['__init__'] = self.__build_init_function()
- return type(self.class_name,
- self.base_class_collection,
- self.class_attributes)
- #DEBUG
- def say_hello(self):
- print('Hello by ' + self.name)
- class_builder = ClassBuilder('Human')
- class_builder.instance_attributes['books'] = list()
- class_builder.instance_attributes['name'] = ''
- class_builder.instance_functions['say_hello'] = say_hello
- Human = class_builder.build()
- human1 = Human()
- human1.books.extend(['Human1 Book1', 'Human1 Book2'])
- human1.name = 'Maxim'
- human2 = Human()
- human2.books.append('Human2 Book1')
- human2.name = 'Andrey'
- human1.say_hello()
- print('name = {0}; books = {1}'.format(human1.name, human1.books))
- human2.say_hello()
- print('name = {0}; books = {1}'.format(human2.name, human2.books))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement