繁体   English   中英

初学者:python名称空间冲突?

[英]beginner: python namespace collision?

免责声明:我是python新手,但具有drupal编程经验

我正在阅读Django的权威指南(http://www.djangobook.com/en/1.0/chapter07/)。 发出后

python manage.py startapp books

python使用views.py创建books包。 在本教程的后面,我们将以下内容输入到该views.py文件中:

# Create your forms here.
from django import forms
from django.forms import form_for_model
from models import Publisher

PublisherForm = forms.form_for_model(Publisher) 

TOPIC_CHOICES = (
    ('general', 'General enquiry'),
    ('bug', 'Bug report'),
    ('suggestion', 'Suggestion'),
)

class ContactForm(forms.Form):
    topic = forms.ChoiceField(choices=TOPIC_CHOICES)
    message = forms.CharField(widget=forms.Textarea())
    sender = forms.EmailField(required=False)

    def clean_message(self):
        message = self.cleaned_data.get('message', '')
        num_words = len(message.split())
        if num_words < 4:
            raise forms.ValidationError("Not enough words!")
        return

除非我键入了错误的内容或误解了某些内容(可能是这样),否则我们现在(貌似)在表单(books / forms.py)和Django表单之间发生冲突。 那么,Python在上面提到了哪些内容

message = forms.CharField(widget=forms.Textarea())

这个说法:

from django.forms import form_for_model

实际上只将名称form_for_model拉入模块全局命名空间,现有的名称forms不受影响。 即使这样:

import django.forms

这不会是一个问题,因为它只能以完全限定的形式提供名称, django.forms (这是unambigios并且不会与forms冲突)。

与PHP不同,Python仅导入到当前名称空间中,并且每个模块都是其自己的名称空间。 其他模块中的导入不会影响当前的名称空间,反之亦然。

虽然这个示例不会引起冲突,如果存在冲突,您可以使用from ____ import ___ as ___来指定您自己的导入名称

http://docs.python.org/reference/simple_stmts.html#import

暂无
暂无

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

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