类属性转换

时间:2018-07-13 22:04:43

标签: python class properties

我必须使用class。我必须确保xy是属性。

如果提供的值不能转换为整数,请加AttributeError。如果我们给0x的值小于y,则会为其分配值0

如果我们给10x赋予大于y的值,则会为其分配值10

这是我的代码:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def getx(self):
        x=int()
        return self._x
    def gety(self):
        y=int()
        return self._y

        if x>=0:
            return 0
            else if x<=10:
                return 10

我想获得这个:

p = Point(1,12)
print(p.x, p.y) # output "1 10"
p.x = 25
p.y = -5
print(p.x, p.y) # output "10 0"

1 个答案:

答案 0 :(得分:2)

您要寻找的是clamp()函数,该函数带有3个参数:值,所需的最小值和所需的最大值。

属性由@property装饰器定义。为了测试分配给属性的值是否为数字,我使用了numbers模块。这是示例代码:

import numbers

def clamp(v, _min, _max):
    return max(min(v, _max), _min)

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

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

    @x.setter
    def x(self, value):
        if not isinstance(value, numbers.Number):
            raise AttributeError()
        self.__x = clamp(int(value), 0, 10)

    @property
    def y(self):
        return self.__y

    @y.setter
    def y(self, value):
        if not isinstance(value, numbers.Number):
            raise AttributeError()
        self.__y = clamp(int(value), 0, 10)

p = Point(1,12)
print(p.x, p.y) # output "1 10"
p.x = 25
p.y = -5
print(p.x, p.y) # output "10 0"