2014-01-29 67 views
-1

在python中如何向列表添加属性以执行操作?将属性添加到列表中

假设你有一个像类:

class TestClass: 

    def __init__(self, lst): 
     self.lst = lst 

    def test(self, lst): 
     """ 

     >>> t1 = TestClass([1,2,3,4]) 
     >>> t1.test(self.lst).size 
     4 

     """ 

如果附加属性大小,功能测试将返回self.lst的长度。所以,return len(self.lst)

+0

那没有任何意义 - 你为什么要通过'return len(self.lst)'来做到这一点 - 在'test'中还有其他'lst'?你究竟想要做什么 - 我怀疑它没有使功能属性... –

+0

只是一个例子。我不打算用它来做我正在做的事情。但只是为了这个例子。 – Sc4r

+3

你愿意解释一下你在做什么**然后呢? - 我强烈怀疑这是一个XY问题,任何你可能会问的问题的答案可能并不适合你实际想要在这里实现的目标...... –

回答

2

的问题是:

t1.test(self.lst).size 

等同于:

a = t1.test(self.lst) 
a.size 

你不访问的方法的属性,而是基于对返回值方法。你可能想是这样的:

class TestClass: 
    def __init__(self, lst): 
     self.lst = lst 

    def test(self): 
     # do something to self.lst (rather than passing it in again) 

    @property 
    def size(self): 
     return len(self.lst) 

>>> t = TestClass([1,2,3,4]) 
>>> t.test() 
... 
>>> t.size 
4 

如果你真的这个添加到列表中,那么你就需要把它包起来的东西,它提供了size方法:

class SizeList(list): 
    @property 
    def size(self): 
     return len(self) 

class TestClass: 
    def __init__(self, lst): 
     self.lst = SizeList(lst) 

    def test(self): 
     # do something here 
     return self.lst 

>>> t = TestClass([1,2,3,4]) 
>>> t.test().size 
4