我必须使用class
。我必须确保x
和y
是属性。
如果提供的值不能转换为整数,请加AttributeError
。如果我们给0
或x
的值小于y
,则会为其分配值0
。
如果我们给10
或x
赋予大于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"
答案 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"