python - 我可以将参数添加到 python 属性以减少代码重复吗?

标签 python

我有以下类(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/

相关文章:

python - 用于具有多个应用程序的现有 Django 项目的 herokusyncdb

python - 如何在python中将歌曲转换为时变波并为其添加噪音并再次播放?

python - 从函数添加 driver.get() 值时,Selenium 参数无效

c# - 如何将 C Sharp 中的变量读取到 Python 中?

python - 如何在数据框中的列之间进行匹配并保留另一列

python - Pyparsing setParseAction 函数没有参数

python - 匹配冒号前后的单词

python - Django 休息 : Add data to a "required" field automatically

python - 多个参数 psycopg2 where 子句 - 语法错误

python - 在 RGB 图像上绘制多类语义分割透明叠加