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 : 类名
type :就是关键字 type
类可以通过type生成
生成规则:type(classname, (object, ), dict(methodname=func)) 会生成一个
<class '__main__.classname'>的类