Что вы ищете, это функция 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"
Я думаю, что это может решить вашу проблему:
В этой рабочей книге:
Private Sub Workbook_Open()
Worksheets("NameHere").Range("A1") = True
End Sub
В окне кода целевого листа: [ 114]
Private Sub Worksheet_Calculate()
If Worksheets("NameHere").Range("A1") Then MacroRuns
Worksheets("NameHere").Range("A1") = False
End Sub