type building class

def record_factory(cls_name, field_names):
    try:
        # ,替换成空格,split切割成列表
        field_names = field_names.replace(',', ' ').split()
        print(field_names)
    except AttributeError:
        pass
    field_names = tuple(field_names)
    print(field_names)
# record_factory('func', 'weight,price,descriptor')

    def __init__(self, *args, **kwargs):
        """
            self.__slots__:(,)
        """
        attrs = dict(zip(self.__slots__, args))
        attrs.update(kwargs)
        for name, value in attrs.items():
            setattr(self, name, value)

    def __iter__(self):
        for name in self.__slots__:
            yield getattr(self, name)

    def __repr__(self):
        value = ', '.join('{}={!r}'.format(*i) for i in zip(self.__slots__, self))
        return '{}({})'.format(self.__class__.__name__, value)

    cls_attrs = dict(__slots__=field_names,
                     __init__=__init__,
                     __iter__=__iter__,
                     __repr__=__repr__)
    return type(cls_name, (object,), cls_attrs)


a = record_factory('Func', 'weight,price')
print(a(11, 12))

type(classname) = type

classname: class name

type: type is the keyword

Class can be generated by type

Generation rules: type (classname, (object,), dict (methodname = func)) will generate a

<class '__main __. classname' > class

 

Guess you like

Origin www.cnblogs.com/PHUN19/p/11315753.html
Recommended