Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ';自我';Django中的属性是否获取其实例?_Python_Django_Instance_Self - Fatal编程技术网

Python ';自我';Django中的属性是否获取其实例?

Python ';自我';Django中的属性是否获取其实例?,python,django,instance,self,Python,Django,Instance,Self,我正在努力掌握Django和Python。我一直对函数中的self参数感到困惑 例如: class RegistrationForm(forms.ModelForm): email = forms.EmailField(label='Your Email') password1 = forms.CharField(label='Password', \ widget=forms.PasswordInput()) password2

我正在努力掌握Django和Python。我一直对函数中的
self
参数感到困惑

例如:

class RegistrationForm(forms.ModelForm):
    email = forms.EmailField(label='Your Email')
    password1 = forms.CharField(label='Password', \
                    widget=forms.PasswordInput())
    password2 = forms.CharField(label='Password Confirmation', \
                    widget=forms.PasswordInput())

    class Meta:
        model = User
        fields = ['username', 'email']

    def clean_password2(self):
        print "Inside clean_password2:"
        print self
        print "_________________________________________________"
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')
        if password1 and password2 and password1 != password2:
            raise forms.ValidationError("Passwords do not match")
        return password2
终端中的输出为:

[02/Jul/2015 15:03:26]"GET /accounts/register/ HTTP/1.1" 200 5118
Inside clean_password2:
<tr><th><label for="id_username">Username:</label></th><td><input id="id_username" maxlength="30" name="username" type="text" value="TestUser" /><br /><span class="helptext">Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.</span></td></tr>
<tr><th><label for="id_email">Your Email:</label></th><td><input id="id_email" name="email" type="email" value="test@test.com" /></td></tr>
<tr><th><label for="id_password1">Password:</label></th><td><input id="id_password1" name="password1" type="password" /></td></tr>
<tr><th><label for="id_password2">Password Confirmation:</label></th><td><input id="id_password2" name="password2" type="password" /></td></tr>
[02/Jul/2015 15:03:26]“GET/accounts/register/HTTP/1.1”200 5118
内部清洁密码2:
用户名:
必需。30个字符或更少。仅限字母、数字和@/+/-/-。 您的电子邮件: 密码: 密码确认:
也就是说,
self
属性就是上面显示的内容。问题是,这个函数和self属性是从哪里得到的

我不是在问
self
作为python语言特性的作用。我的问题是关于
self
如何在Django中获得一个实例

此代码所属的存储库


TL;DR:为什么我打印self的时候会打印所有的HTML。这是从哪里来的?

如注释中所述,当您打印
self
时,您正在打印
ModelForm
实例

在Python中打印对象时,它调用该对象的
\uuuu str\uuuu
方法

如果查看Form类的方法,它将调用该方法,该方法将字段显示为html表的内容。这是您看到的输出

def __str__(self):
    return self.as_table()

重复我听到一些人说“显式比隐式好”@TheGeorgeous:这个问题不是你所展示的重复。我不是在问作为python语言特性的self的角色。我的问题是赛尔夫如何在Django得到一个实例。在一个非常尖锐的例子中,我提到的例子。如果你仍然发现它是一个副本,请给出一个简短的答复。问题结束。@user248884,self没有“获取”实例。在Python中,当类引用自身时,这只是一种约定。因此,当您打印self时,您得到的是为特定类定义的实例属性。如果您的问题是如何将其转换为html,请检查django的ModelForm类“如何
self
获取实例”到底是什么意思?你在某个地方有一个实例,比如说
my\u registration\u form
,所以当
my\u registration\u form.clean\u password2()
被调用
self
就是这个实例。如果你的问题是Django如何实例化和管理你定义的类,那就太宽泛了。只是,这个模型没有对应的def _ustr __;(self)。您也可以看到存储库。那么它从哪里来?
self
是表单实例,而不是模型实例。我已经链接到表单的
\uuuu str\uuuu
,并将代码包含在我上面的答案中。对。表单实例从何而来?问一下,Django的哪个部分将HTML作为表单实例发送。你的问题没有真正意义。在调用
print self
的方法中,
self
是一个表单实例。print语句正在调用
str(self)
,它调用
self.\uu str\uu()
,然后显示输出。我不知道你说的“哪一部分正在发送”是什么意思。