def _check_value(number):
if not 0 <= number <= 10:
raise ValueError
return number
class A:
def __init__(self, number):
self.number = _check_value(number)
class B:
def __init__(self):
self.factor = 2
def my_algorithm(self, number):
number = _check_value(number)
number += 1 * self.factor
return A(number)
上面的示例是我的代码的简化版本。可以直接实例化类A
或通过类my_algorithm()
中的方法B
实例化。在这两种情况下,我都需要检查number
的值。我的问题是,当我使用类A
中的方法实例化类B
时,将仔细检查number
的值。
我的问题是如何知道使用类A
中的方法实例化了类B
以避免重复检查?还是有更好的解决方案?
答案 0 :(得分:1)
我不是100%遵循您对实例的问题,但是我认为您没有要检查两次该值? try ... except
在这里可以帮忙吗?
def _check_value(number):
if not 0 <= number <= 10:
raise ValueError
return number
class A:
def __init__(self, number):
self.number = _check_value(number)
class B:
def __init__(self):
self.factor = 2
def my_algorithm(self, number):
try:
return A(number + 1 * self.factor)
except ValueError: # not a very descriptive error, but nbd
print("Provided value is out of bounds")
答案 1 :(得分:0)
为了避免再次检查,我最终得到了以下代码:
def _check_value(number):
if not 0 <= number <= 10:
raise ValueError
return number
class A:
def __init__(self, number, check=True):
if check:
self.number = _check_value(number)
else:
self.number = number
class B:
def __init__(self):
self.factor = 2
def my_algorithm(self, number):
number = _check_value(number)
number += 1 * self.factor
return A(number, check=False)