理解 类 'self'
Understanding classes 'self'
在下面的例子中employee
没有用在__init__
函数中,但是我们在调用self.employee.append()
的add_employee
函数中使用了它。
这是为什么?为什么我们使用 self.employee.append()
而不是 employee.append()
?我以为我们只对 __init__
函数中的变量使用 self
。
class Workers():
employee = []
def __init__(self, name):
self.name = name
self.skills = []
self.add_employee()
def add_employee(self):
self.employee.append(self.name)
print('{} added to list'.format(self.name))
employee
、__init__
和 add_employee
只是 class Workers
.
的属性
employee
是一个属性,是一个列表,__init__
是另一个属性,是一个方法。
同样来自[def文档](
https://docs.python.org/3/reference/compound_stmts.html#grammar-token-funcdef):
A function definition is an executable statement. Its execution binds the function name in the current local namespace to a function object (a wrapper around the executable code for the function).
所以 employees
和 __init__
以及所有其他方法实际上是相同的:命名空间中的名称。
另请参阅
https://docs.python.org/3/tutorial/classes.html#class-objects
employee
对象是一个class变量,不是实例变量。这意味着它在 class 的所有实例之间共享。您可以使用 classname.classvariablename
或 instancename.classvariablename
访问它。如果你用 instancename.classvariablename = newvalue
之类的东西重新分配一个实例的版本,该实例将有一个同名的新实例变量,用 self
引用(即,您将无法执行 instancename.classvariablename
来获取 class 变量),但其他实例 - 和 class - 仍然能够(即 classname.classvariable
仍然有效,并且 otherinstancename.classvariable
仍将指向那个 class 变量)。以下示例演示了这一点。
>>> class A:
... l = []
...
>>> a = A()
>>> b = A()
>>> a.l
[]
>>> A.l
[]
>>> a.l = 3
>>> b.l
[]
>>> b.l.append(1)
>>> b.l
[1]
>>> A.l
[1]
>>> a.l
3
在下面的例子中employee
没有用在__init__
函数中,但是我们在调用self.employee.append()
的add_employee
函数中使用了它。
这是为什么?为什么我们使用 self.employee.append()
而不是 employee.append()
?我以为我们只对 __init__
函数中的变量使用 self
。
class Workers():
employee = []
def __init__(self, name):
self.name = name
self.skills = []
self.add_employee()
def add_employee(self):
self.employee.append(self.name)
print('{} added to list'.format(self.name))
employee
、__init__
和 add_employee
只是 class Workers
.
employee
是一个属性,是一个列表,__init__
是另一个属性,是一个方法。
同样来自[def文档]( https://docs.python.org/3/reference/compound_stmts.html#grammar-token-funcdef):
A function definition is an executable statement. Its execution binds the function name in the current local namespace to a function object (a wrapper around the executable code for the function).
所以 employees
和 __init__
以及所有其他方法实际上是相同的:命名空间中的名称。
另请参阅 https://docs.python.org/3/tutorial/classes.html#class-objects
employee
对象是一个class变量,不是实例变量。这意味着它在 class 的所有实例之间共享。您可以使用 classname.classvariablename
或 instancename.classvariablename
访问它。如果你用 instancename.classvariablename = newvalue
之类的东西重新分配一个实例的版本,该实例将有一个同名的新实例变量,用 self
引用(即,您将无法执行 instancename.classvariablename
来获取 class 变量),但其他实例 - 和 class - 仍然能够(即 classname.classvariable
仍然有效,并且 otherinstancename.classvariable
仍将指向那个 class 变量)。以下示例演示了这一点。
>>> class A:
... l = []
...
>>> a = A()
>>> b = A()
>>> a.l
[]
>>> A.l
[]
>>> a.l = 3
>>> b.l
[]
>>> b.l.append(1)
>>> b.l
[1]
>>> A.l
[1]
>>> a.l
3