Python 用列表装饰属性设置器 [英] Python decorating property setter with list
本文介绍了Python 用列表装饰属性设置器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
globalList = []类 MyList:def __init__(self):self._myList = [1, 2, 3]@财产def myList(self):返回 self._myList + globalList@myList.setterdef myList(self, val):self._myList = valmL1 = MyList()打印(myList:",mL1.myList)mL1.myList.append(4)打印(追加4后,myList:",mL1.myList)mL1.myList.extend([5,6,"8","IX"])打印(扩展后,myList:",mL1.myList)
结果:
myList: [1, 2, 3]追加 4 后,myList: [1, 2, 3]扩展后,myList: [1, 2, 3]
我面临的问题是 mL1.myList.append(4) 和 mL1.myList.extend([5,6,"eight","IX"]) 不会修改 mL1 对象中的 _myList 属性.我该怎么做才能解决问题?
解决方案
我为类对象定义了一个方法 append() 和一个方法 extend().它分别附加到成员 myList 和扩展成员 myList.
全局 globalList全局列表 = []类 MyList():def __init__(self):self._myList = [1, 2, 3]@财产def myList(self):返回 self._myList + globalList@myList.setterdef myList(self, val):self._myList = valdef append(self, val):self.myList = self.myList + [val]返回 self.myListdef扩展(自我,val):返回 self.myList.extend(val)mL1 = MyList()打印(myList:",mL1.myList)mL1.append(4)打印(追加4后,myList:",mL1.myList)mL1.myList.extend([5,6,"8","IX"])打印(扩展后,myList:",mL1.myList)
结果是
<预><代码>>>>('myList:', [1, 2, 3])('附加一个 4, myList: ', [1, 2, 3, 4])('扩展后,myList: ', [1, 2, 3, 4, 5, 6, '8', 'IX'])globalList = []
class MyList:
def __init__(self):
self._myList = [1, 2, 3]
@property
def myList(self):
return self._myList + globalList
@myList.setter
def myList(self, val):
self._myList = val
mL1 = MyList()
print("myList: ", mL1.myList)
mL1.myList.append(4)
print("after appending a 4, myList: ", mL1.myList)
mL1.myList.extend([5,6,"eight","IX"])
print("after extend, myList: ", mL1.myList)
Result:
myList: [1, 2, 3]
after appending a 4, myList: [1, 2, 3]
after extend, myList: [1, 2, 3]
The problem I am facing is that mL1.myList.append(4) and mL1.myList.extend([5,6,"eight","IX"]) do not modify the _myList attribute in the mL1 object. How could I do to resolve the problem?
解决方案
I define a method append() and a method extend() for the class object. It respectively appends to member myList and extends member myList.
global globalList
globalList = []
class MyList():
def __init__(self):
self._myList = [1, 2, 3]
@property
def myList(self):
return self._myList + globalList
@myList.setter
def myList(self, val):
self._myList = val
def append(self, val):
self.myList = self.myList + [val]
return self.myList
def extend(self, val):
return self.myList.extend(val)
mL1 = MyList()
print("myList: ", mL1.myList)
mL1.append(4)
print("after appending a 4, myList: ", mL1.myList)
mL1.myList.extend([5,6,"eight","IX"])
print("after extend, myList: ", mL1.myList)
result is
>>>
('myList: ', [1, 2, 3])
('after appending a 4, myList: ', [1, 2, 3, 4])
('after extend, myList: ', [1, 2, 3, 4, 5, 6, 'eight', 'IX'])
这篇关于Python 用列表装饰属性设置器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文