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}}?
答案 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个变量self
,first_name
和last_name
。
self
与其他语言中的this
类似。 first_name
和last_name
是传递给__init__
的本地变量,因为first_name
和last_name
在__init__
之外没有引用。
我们将first_name
和last_name
存储在对象变量self.first_name
和self.last_name
中。 self.first_name
和self.last_name
具有对象生命的范围。
分配值
self.first_name, self.last_name = first_name, last_name
就像
(self.first_name, self.last_name) = (first_name, last_name)
左侧分配2个值,右侧有2个值。