在Python

时间:2016-03-08 21:34:26

标签: python properties

如何在__init__内调用Python(v2.7)setter属性?我写了下面的课,但我不知道如何更改它以使其工作。我收到AttributeError: 'test' object has no attribute '_x'个例外。这里有一些类似的问题但到目前为止找不到答案。我们的想法是调用初始化程序进行一些处理/切片并将结果分配给属性

class test(object):
    def __init__(self, a,b):
        self._x = self.x(a,b)

    @property
    def x(self):
        return self._x

    @x.setter
    def x(self, a, b):
        self._x = "Get this from {} and make a dataframe like {}".format(a,b)

1 个答案:

答案 0 :(得分:8)

self.x是一个属性,因此您只需像使用常规属性一样直接分配给它:

def __init__(self, a, b):
    self.x = (a, b)

但是,setter总是被赋予一个对象;在上面的例子中,它传递了一个元组;你可以解压缩它:

@x.setter
def x(self, value):
    a, b = value
    self._x = "Get this from {} and make a dataframe like {}".format(a,b)

注意value参数;这是将作业传递给制定者的结果。

演示:

>>> class test(object):
...     def __init__(self, a, b):
...         self.x = (a, b)
...     @property
...     def x(self):
...         return self._x
...     @x.setter
...     def x(self, value):
...         a, b = value
...         self._x = "Get this from {} and make a dataframe like {}".format(a,b)
...
>>> t = test(42, 'foo')
>>> t.x
'Get this from 42 and make a dataframe like foo'