Python OOP对象实例化

时间:2017-03-31 14:04:25

标签: python oop

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

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>

由于

2 个答案:

答案 0 :(得分:4)

首先,您需要counter+=1Employee.counter += 1,以使代码的行为与您说的一致。否则,在__init__范围内尝试增加一个未知的变量时会出错。

由于你没有引用Employee("foo"),它很快就会被垃圾收集并永远消失。但是,这并未改变调用Employee.__init__来增加counter的事实。

答案 1 :(得分:1)

Employee("foo")

上面创建的这个对象一旦使用就会丢失,无法重复使用,而实例化像

这样的对象时
obj1=Employee("Alan")

您在obj1中有对该对象的引用,可以重复使用。

  

我的问题是,当我接到这个电话时会发生什么?

背后会发生什么

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