Python3之创建类的两种方式

方式一:利用class关键字

class Chinese(object):
    country='China'
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def talk(self):
        print('%s is talking' %self.name)

方式二(就是手动模拟class创建类的过程):将创建类的步骤拆分开,手动去创建

def walk(self):
    print('=====>', self.name)


class_name = 'Foo'
bases = (object,)
class_dict = {
    'x': 1,
    'run': walk
}
Foo = type(class_name, bases, class_dict)
print(Foo.__dict__)

应用场景:动态创建一个form组件的字段

field_dict = {}
for que in question_list:
    if que.tp == 1:
        field_dict['val_%s' % que.id] = fields.ChoiceField(
            label=que.caption,
            error_messages={'required':'必填'},
            widget=widgets.RadioSelect,
            choices=[(i, i) for i in range(1, 11)]
        )
    elif que.tp == 2:
        field_dict['option_id_%s' % que.id] = fields.ChoiceField(
            label=que.caption,
            widget=widgets.RadioSelect,
            choices=models.Option.objects.filter(
                qs_id=que.id).values_list('id', 'name'))
    else:
        from django.core.exceptions import ValidationError
        from django.core.validators import RegexValidator
        # field_dict['x_%s' % que.id] = fields.CharField(
        #     label=que.caption, widget=widgets.Textarea,validators=[RegexValidator(regex=""),])
        field_dict['content_%s' % que.id] = fields.CharField(
            label=que.caption, widget=widgets.Textarea, validators=[func, ])

MyTestForm = type("MyTestForm", (Form,), field_dict)

 

posted on 2018-05-02 18:54  王大拿  阅读(1229)  评论(0)    收藏  举报

导航