每个实例变量都需要一个新的属性get / set方法吗?

时间:2014-07-01 08:26:10

标签: python properties

我在这里阅读了有关stackoverflow的几篇教程,文章和问题,包括python doc,但是他们都在他们的示例中使用了单个实例变量,如果你有更多的话,很难看到python属性如何工作而不是一个。

起初我认为属性函数是为了能够设置或获取任何属性而创建的,所以你只能创建一个get和一个set方法,然后创建任意数量的实例变量来使用它们,但这似乎不是案例(?)

如果我有以下代码(直接来自property()上的官方文档):

class C(object):
    def __init__(self):
        self._x = None

    def getx(self):
        return self._x
    def setx(self, value):
        self._x = value
    def delx(self):
        del self._x
    x = property(getx, setx, delx, "I'm the 'x' property.")

除了删除方法“delx”之外,还有一个方法“getx”和一个方法“setx”。如果我还需要一些像y和z这样的实例变量,那么我需要编写以下代码:

class C(object):
    def __init__(self, x, y, z):
        self._x = None
        self._y = 2
        self._z = 4

    def getx(self):
        return self._x
    def gety(self):
        return self._y
    def getz(self):
        return self._z

    def setx(self, value):
        self._x = value
    def sety(self, value):
        self._y = value
    def setz(self, value):
        self._z = value

    def delx(self):
        del self._x
    def dely(self):
        del self._y
    def delz(self):
        del self._z

    x = property(getx, setx, delx, "I'm the 'x' property.")
    y = property(gety, sety, dely, "I'm the 'y' property.")
    z = property(getz, setz, delz, "I'm the 'z' property.")

上面的代码看起来很像java setter / getters,而在python中使用属性的原因似乎正是为了避免这种情况,所以你打算使用某种类型的og通用getter / setter代替吗?

请不要用大量的-1来打击我,我只是想了解这一点,我已经阅读了相当多的内容,试图避免发布这些人经常会因为人们不是python中的高手而感到恼火。

1 个答案:

答案 0 :(得分:0)

你的例子中的getter和setter是没用的,只是跳过它们。您所需要的只是:

class C(object):
    def __init__(self, x, y, z):
        self.x = None
        self.y = 2
        self.z = 4

只有在你想要做一些与众不同的事情时才需要吸气剂和二传手。仅使用属性即可获得属性和设置属性。