如何确定某个类是否被另一个类中的方法实例化?

时间:2018-11-24 14:55:59

标签: python

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以避免重复检查?还是有更好的解决方案?

2 个答案:

答案 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)