在python中创建新对象不会返回新对象

Qui*_*nma 2 python

我是python的新手.

我打电话时为什么没有收到新物品tempMyObject = myObject()

class myObject(object):
  x = []

def getMyObject():
  tempMyObject = myObject()
  print "debug: %s"%str(tempMyObject.x)
  tempMyObject.x.append("a")
  return tempMyObject
#run
a = getMyObject()
b = getMyObject()
Run Code Online (Sandbox Code Playgroud)

我的调试打印出来:

debug: []
debug: ["a"]
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这两个调试数组都不为null,有人可以赐教吗?

编辑:我发现我的帖子中放入python代码的错误.我在我的函数中使用.append("a")

Hen*_*ter 6

您已创建x为类变量而不是实例变量.要将变量与类的特定实例相关联,请执行以下操作:

class myObject(object):
    def __init__(self): # The "constructor"
        self.x = [] # Assign x to this particular instance of myObject

>>> debug: []
>>> debug: []
Run Code Online (Sandbox Code Playgroud)

为了更好地解释发生了什么,请看看这个小型模型,它演示了同样的事情,更明确一些(如果也更冗长).

class A(object):
    class_var = [] # make a list attached to the A *class*
    def __init__(self):
        self.instance_var = [] # make a list attached to any *instance* of A

print 'class var:', A.class_var # prints []
# print 'instance var:', A.instance_var # This would raise an AttributeError!

print

a = A() # Make an instance of the A class
print 'class var:', a.class_var # prints []
print 'instance var:', a.instance_var # prints []

print

# Now let's modify both variables
a.class_var.append(1)
a.instance_var.append(1)
print 'appended 1 to each list'
print 'class var:', a.class_var # prints [1]
print 'instance var:', a.instance_var # prints [1]

print

# So far so good. Let's make a new object...
b = A()
print 'made new object'
print 'class var:', b.class_var # prints [1], because this is the list bound to the class itself
print 'instance var:', b.instance_var # prints [], because this is the new list bound to the new object, b

print

b.class_var.append(1)
b.instance_var.append(1)
print 'class var:', b.class_var # prints [1, 1]
print 'instance var:', b.instance_var # prints [1]
Run Code Online (Sandbox Code Playgroud)

  • @BlackVegetable在技术上,它是初始化器(因为对象已经构造),而`__new__`是构造函数,但是... (2认同)