在以下示例中,employee
函数中未使用__init__
,但我们在调用add_employee
的{{1}}函数中使用了它。
这是为什么?为什么我们使用self.employee.append()
代替self.employee.append()
?我认为我们只对employee.append()
函数中的变量使用self
。
__init__
答案 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.classvariablename
或instancename.classvariablename
访问它。如果您使用instancename.classvariablename = newvalue
之类的内容重新分配实例的版本,该实例将具有该名称的新实例变量,该变量将使用self
引用来屏蔽其对类变量的访问(即,你无法做instancename.classvariablename
来获取类变量),但是其他实例 - 以及类 - 仍然能够(即classname.classvariable
仍然可以工作,并且{ {1}}仍将指向该类变量)。以下示例演示了这一点。
otherinstancename.classvariable