在python中创建属性vs getter和setter的列表

时间:2016-01-25 08:28:58

标签: python properties getter-setter

class OurAtt():
    def __init__(self):
        pass

class OurClass:

    def __init__(self):
        self.__OurAtt = OurAtt()

    @property
    def OurAtt(self):
        return self.__OurAtt

    @OurAtt.setter
    def OurAtt(self, val):
        if val < 0:
            self.__OurAtt = 0
        elif val > 1000:
            self.__OurAtt = 1000
        else:
            self.__OurAtt = val


x = OurClass()
x.OurAtt.Var1 = 1
print x.OurAtt.Var1

问题:

  1. 如何创建100个变量的列表,如x.OurAtt.Var1,x.OurAtt.Var2 .. x.OurAtt.Var100并为它们分配初始值1,2 .... 100。

  2. 是否有可能做到这样的事情x.OurAtt.Var [1..100] = [1..100]?基本上需要具有属性的List。

1 个答案:

答案 0 :(得分:1)

不要创建单独的varX属性,不。您可以使用__getitem____setitem__方法创建新对象,而是使用x.your_attr[X]订阅表示法:

class ListLike(object):
    def __init__(self):
        self._values = list(range(101))

    def __len__(self):
        return len(self._values)

    def __getitem__(self, index):
        return self._values[index]

    def __setitem__(self, index, value):
        if not 0 <= index < len(self):
            raise IndexError(index)
        self._values[index] = max(0, min(1000, val))

然后将其用作您的属性:

class Foo(object):
    def __init__(self):
        self.bar = ListLike()