我是Python的新手,我对OOP有一个两难的境地(我熟悉OOP概念(。
基本上,我有一个带有静态类变量的类(counter
显示我实例化了多少对象(:
class Employee:
counter=0
def __init__(self,name):
self.name=name
Employee.counter+=1
所以现在我实例化一个对象:
obj1=Employee("Alan")
我的问题是:当我接到这个电话时会发生什么?后面会发生什么,因为静态变量"计数器"递增,但可以访问像这样创建的对象?
Employee("foo")
<__main__.Employee object at 0x02A16870>
谢谢
首先,你需要counter+=1
Employee.counter += 1
,以便代码的行为像你说的那样。否则,您将因尝试递增 __init__
范围内未知的变量而收到错误。
由于您没有参考Employee("foo")
因此它很快就会被垃圾收集并永远消失。但是,这并不能改变调用Employee.__init__
以增加counter
的事实。
Employee("foo")
上面创建的这个对象将在使用后立即丢失,并且无法重复使用,而当您实例化一个对象时,例如
obj1=Employee("Alan")
您在 obj1
中具有该对象的引用,并且可以重复使用它。
我的问题 当我接到这个电话时会发生什么?背后发生了什么
__init__
函数是构造函数,每次创建类的新对象时都会调用它。由于此__init__
函数递增计数器变量,因此每次创建对象时,都会调用__init__
函数并递增计数器。