我有以下类(class):
class Vector(object):
def __init__(self, x=0, y=0, z=0):
self.x = x
self.y = y
self.z = z
def _getx(self):
return self._x
def _setx(self, value):
self._x = float(value)
x = property(_getx, _setx)
def _gety(self):
return self._y
def _sety(self, value):
self._y = float(value)
y = property(_gety, _sety)
def _getz(self):
return self._z
def _setz(self, value):
self._z = float(value)
z = property(_getz, _setz)
这三个 getter 和 setter 除了它们修改的对象属性 (x, y, z) 之外都是相同的。有没有一种方法可以写一个 get 和一个 set,然后将变量传递给修改,这样我就不会重复自己?
最佳答案
当然,按照 this doc 中清楚解释的概念制作自定义描述符:
class JonProperty(object):
def __init__(self, name):
self.name = name
def __get__(self, obj, objtype):
return getattr(obj, self.name)
def __set__(self, obj, val):
setattr(obj, self.name, float(val))
然后直接使用它:
class Vector(object):
def __init__(self, x=0, y=0, z=0):
self.x = x
self.y = y
self.z = z
x = JonProperty('_x')
y = JonProperty('_y')
z = JonProperty('_z')
关于python - 我可以将参数添加到 python 属性以减少代码重复吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1380566/