繁体   English   中英

如何在Python中访问类变量?

[英]How to access class variable in Python?

我是Python编程的新手,想知道如何将在一个文件中声明的变量访问到另一个文件? 我正在使用Django,并且有两个文件:

  1. forms.py

     class ContactForm(forms.Form): full_name = forms.CharField(max_length=100) email = forms.EmailField() message = forms.CharField(max_length=1000) 
  2. views.py

     from .forms import ContactForm def contact(request): e = ContactForm() toPrint = e.get(email) print(toPrint) 

我只是测试它以在终端上打印,以帮助我学习如何访问这些变量以在views.py中使用它们

在视图中,您通常会传递进入表单的数据,然后可以像这样使用cleaned_data来获取它

def contact(request):
    context = {}
    if request.method == 'POST':
        form = ContactForm(data=request.POST)
        if form.is_valid():
            email = form.cleaned_data.get('email', '')
            # do something with email here??
    else:
        form = ContactForm()
    context['form'] = form
    return render(request, 'signup.html', context)

编辑:正如评论中指出的那样,由于某些django-magic,此答案在django的特定情况下不起作用。 但总的来说,这应该是正确的。

首先,应该在ContactForm类的__init__函数(构造函数)中声明变量。 然后将其存储在self下:

class ContactForm(forms.Form):
    def __init__(self):
        super().__init__()
        self.full_name = forms.CharField(max_length=100)
        self.email = forms.EmailField()
        self.message = forms.CharField(max_length=1000)

在两种情况下(如果您像保留代码一样使用代码,或者显式使用构造函数),则只需按以下方式访问变量即可:

e = ContactForm()
to_print = e.email
....
e = ContactForm()

如果您的表格经过验证,则可以通过

e.cleaned_data.get('email')

Django表单使用所谓的元类。 在这种特定情况下,它要做的是捕获表单上定义的所有Field实例,并将它们放入名为declared_fields的字典中。 您可以在此处查看源代码。 您将以ContactForm.declared_fields['email']形式访问原始字段。

该表单将创建一个declared_fieldsfields副本,并将其放在fields属性中,以允许在单个表单实例中更改字段。 然后,您将如下访问字段:

e = ContactForm()
e.fields['email']

正如其他人所说,如果不是元类,则只需使用ContactForm.emaile.email

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM