我想创建一个函数,该函数从同一个类中获取不同的对象,然后更改该对象的参数。但是,当我尝试改变该对象时,不改变该对象的变量,而是改变了本地对象。
例如:
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()'清除两个项目列表。
答案 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 []