Python 用列表装饰属性设置器 [英] Python decorating property setter with list

查看:29
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆