是否可以在Python中调用同一类的不同对象的变量?

时间:2016-02-10 04:30:28

标签: python function object parameters

我想创建一个函数,该函数从同一个类中获取不同的对象,然后更改该对象的参数。但是,当我尝试改变该对象时,不改变该对象的变量,而是改变了本地对象。

例如

 class MyClass():

     item = ''
     def __init__(self):
         self.item = ''
     def function(self, otherObject):
         otherObject.item = self.item 

继承我的代码:

class Taxonomy:
     categoryName = ''
     itemList = []

    def __init__(self,  itemList = []):
         self.categoryName = categoryName
         self.itemList = itemList  

    def addTaxonomy(self, tax):

        self.taxonomy_tree[''][self.categoryName][tax.categoryName]
        self.itemList.clear()
        self.itemList.append(self.categoryName)
        tax.itemList.clear()   

出于某种原因,“tax.itemList.clear()'清除两个项目列表。

1 个答案:

答案 0 :(得分:1)

因为itemList都指向同一个列表实例。在python中创建一个带有可变类型的默认参数值不是一个好主意。拿def f(x=[]): pass。对于f的所有调用,此函数共享相同的列表,其中不传递参数x。

此代码更好地说明了我想说的内容。

def f(x=[]):
    x.append(1)
    return x

f()
print f() # ouput: [1, 1]

希望您可以使用参数的默认None值轻松重构。

def f(x=None):
    x = x or []
    x.append(1)
    return x

f()
print f() # ouput: [1]

您问题的具体解决方案是:

def __init__(self,  itemList = None):
     self.categoryName = categoryName
     self.itemList = itemList or []