Python类变量初始化访问ini外部的变量

2024-09-30 06:31:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我们的项目中使用Django。我用Django表单创建了一个表单。在其中一个表单中,我需要检查一个变量,并根据变量的值添加或删除元素。在

我在初始化对象时将这个变量传递给窗体。 即form=MyForm(flag)

在表格课上我做了这个

class MyInfoForm(forms.Form):
    def __init__(self, *args,**kwargs):
        self.flag= kwargs.pop('flag', None)
        super(MyInfoForm, self).__init__(*args, **kwargs)
        print self.flag

    Firstname = forms.CharField(label=u' First name :', max_length=30)

在init函数中,我已经打印出了标志,并且它工作正常。但如何访问外部变量init 我试过了

^{pr2}$

但它不起作用。在


Tags: 项目对象djangoselfform元素表单init
3条回答
print MyInfoForm.myFlag

这个怎么样?在

这要看。。。标志的作用域应该是类还是类的实例?在

如果作用域应该是实例(这是您第一次尝试时的情况),那么您可以通过执行以下操作来访问它:

instance = MyInfoForm(flag)
...
instance.flag

另一方面,如果variable标志属于类(这意味着,对于MyInfoForm的每个实例,flag只有一个值),则可以通过执行以下操作来访问它:

^{pr2}$

还有。。。将变量声明为myFlag,并尝试打印myflag。变量名区分大小写。在

class语句是一个可执行语句,它:

  1. 创建命名空间
  2. 在类语句块的顶层按顺序执行所有代码
  3. 使用类名、命名空间和父类列表调用适当的元类(默认为type
  4. 将新创建的class对象绑定到封闭(通常是模块)命名空间中的类名

长话短说,您不能从class语句体中访问实例属性,因为实例甚至类本身都不存在。在

如果您希望根据传递给表单初始值设定项的参数,在每个实例的基础上更新/添加/删除字段,正确的解决方案是首先调用父级的初始值设定项(以确保表单的实例字段正确初始化),然后执行所需的任何操作,例如:

class MyInfoForm(forms.Form):
    firstname = forms.CharField(label=u' First name :', max_length=30)
    def __init__(self, *args,**kwargs):
        self.flag= kwargs.pop('flag', None)
        super(MyInfoForm, self).__init__(*args, **kwargs)
        if self.flag:
            # XXX IMPORTANT : 
            # you want to access self.fields['fieldname']                
            # NOT self.fieldname
            self.fields["firstname"].label = "Yadda"

相关问题 更多 >

    热门问题