变量点 - 从类中访问属性

时间:2014-02-27 09:54:36

标签: python django django-templates

from django.template import Template, Context
    class Person(object):
        def __init__(self, first_name, last_name):
            self.first_name, self.last_name = first_name, last_name
t = Template('Hello, {{ person.first_name }} {{ person.last_name }}.')
c = Context({'person': Person('John', 'Smith')})
t.render(c)
>>> u'Hello, John Smith.

好的,最让我困惑的是:{{ person.last_name }}。具体来说,它是从类中提取的属性。

由于Person类中有3个属性:

self.first_name, self.last_name = first_name, last_name

为什么{{ person.last_name }}没有'self.last_name = first_name'来自{{ person.last_name }}并且获得John的输出。为什么"last_name"取而代之的是{{1}}?

3 个答案:

答案 0 :(得分:4)

所以你的问题的要点似乎是这一行:

self.first_name, self.last_name = first_name, last_name

此行只是从first_name分配self.first_name,从last_name分配self.last_name。它与此相同:

class Person(object):
    def __init__(self, first_name, last_name):
        self.first_name = first_name
        self.last_name = last_name

所以在Python中:

a, b = 1, 2

只是意味着a得到值1而b得到值2.如果你想a和b具有相同的值,你会做:

a = b = 1

答案 1 :(得分:1)

因为您在init方法中的分配。

self.first_name, self.last_name = first_name, last_name

等于

self.first_name = first_name
self.last_name = last_name

那么这里的混乱是什么......?

答案 2 :(得分:0)

__init__有3个变量selffirst_namelast_name

self与其他语言中的this类似。 first_namelast_name是传递给__init__的本地变量,因为first_namelast_name__init__之外没有引用。

我们将first_namelast_name存储在对象变量self.first_nameself.last_name中。 self.first_nameself.last_name具有对象生命的范围。

分配值

self.first_name, self.last_name = first_name, last_name

就像

(self.first_name, self.last_name) = (first_name, last_name)

左侧分配2个值,右侧有2个值。