2017-03-31 158 views
0

我是Python新手,我有一个关于OOP的困境(我熟悉OOP概念)。
基本上,我有一个静态类变量(counter,显示有多少个对象我都实例化)类:Python OOP对象实例化

class Employee: 
    counter=0 
    def __init__(self,name): 
    self.name=name 
    Employee.counter+=1 

所以现在我实例化一个对象:

obj1=Employee("Alan") 

我的问题是:当我有这个电话会发生什么?后面发生了什么,因为静态变量“counter”增加了,但是可以访问像这样创建的对象吗?

Employee("foo") 

<__main__.Employee object at 0x02A16870>

感谢

+0

'__init__'函数是你的构造函数,所以每当你创建一个新的'Employee对象时它就增加'counter'。你到底在问什么? –

+0

您显示的代码不会运行。应该通过实例或类访问'counter' –

+0

@MosesKoledoye:为什么不呢?哦,我现在看到......'counter + = 1'应该是'Employee.counter + = 1'。 –

回答

4

首先,你需要counter+=1Employee.counter += 1为了使代码的行为像你说的它。否则,您将尝试增加一个在__init__范围内未知的变量。

由于您没有提及Employee("foo")它很快就会被垃圾收集并且永远消失。但是,这并不会改变Employee.__init__被称为增加您的counter的事实。

+0

是的,我忘了把Employee.counter + = 1。所以基本上,因为现在有参考,垃圾收集器将释放堆。谢谢你的解释。 – distrobyte

1
Employee("foo") 

上面创建这个对象将随着使用,并且不能被重新使用,而当你实例像

obj1=Employee("Alan") 

的对象必须在obj1一个该对象的参考,并尽快丢失它可以被重新使用。

我的问题当我有这个电话时会发生什么?后面会发生什么

__init__函数是构造函数,每次创建类的新对象时都会调用它。由于这个函数增加了计数器变量,因此每次创建一个对象时,都会调用__init__函数,并且计数器会递增。