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