理解课程' self'

时间:2016-06-04 21:34:22

标签: python class python-3.4 self

在以下示例中,employee函数中未使用__init__,但我们在调用add_employee的{​​{1}}函数中使用了它。 这是为什么?为什么我们使用self.employee.append()代替self.employee.append()?我认为我们只对employee.append()函数中的变量使用self

__init__

2 个答案:

答案 0 :(得分:1)

employee__init__add_employee只是班级Workers的属性。

employee是一个列表属性,__init__是另一个属性,是一种方法。

同样来自[def文档]( https://docs.python.org/3/reference/compound_stmts.html#grammar-token-funcdef):

  

函数定义是可执行语句。它的执行将当前本地命名空间中的函数名绑定到一个函数对象(该函数的可执行代码的包装器)。

所以employees__init__以及所有其他方法实际上是相同的:命名空间中的名称。

另见 https://docs.python.org/3/tutorial/classes.html#class-objects

答案 1 :(得分:0)

employee对象是类变量,而不是实例变量。这意味着它在该类的所有实例中共享。您可以使用classname.classvariablenameinstancename.classvariablename访问它。如果您使用instancename.classvariablename = newvalue之类的内容重新分配实例的版本,该实例将具有该名称的新实例变量,该变量将使用self引用来屏蔽其对类变量的访问(即,你无法做instancename.classvariablename来获取类变量),但是其他实例 - 以及类 - 仍然能够(即classname.classvariable仍然可以工作,并且{ {1}}仍将指向该类变量)。以下示例演示了这一点。

otherinstancename.classvariable