python类中的输入检查函数

2024-04-20 11:43:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个对特定类的输入的检查,我有下面的示例:

class NmbPair:
    def __init__(self, a = None, b = None):
        self.a = a
        self.b = b

    def __eq__(self, other):
        if self.a == other.a and self.b == other.b:
            return True
        return False

class NmbOperation:
    def __init__(self, *, NmbPair1, NmbPair2):
        if not self.check(NmbPair1, NmbPair2): ## this is the check
            return
        self.NmbPair1 = NmbPair1
        self.NmbPair2 = NmbPair2
        self._add_first_nmb()

    def check(self, a, b):
        if a == b:
            return False

    def _add_first_nmb(self):
        self.sum_a = self.NmbPair1.a + self.NmbPair2.a

所以我想检查输入的NmbPairs是否不同,如果它们是相同的,我不希望创建nmbooperation的实例。在

例如:

^{pr2}$

但这就带来了一个错误:

AttributeError: 'NmbOperation' object has no attribute 'sum_a'

我不太清楚我做错了什么


Tags: selfnoneaddfalsereturnifinitdef
1条回答
网友
1楼 · 发布于 2024-04-20 11:43:24

您正在创建一个NmbOperation对象,__init__方法在执行行之前立即返回该对象

self.NmbPair1 = NmbPair1
self.NmbPair2 = NmbPair2
self._add_first_nmb()

这是因为self.check(NmbPair1, NmbPair2)返回None,所以not self.check(NmbPair1, NmbPair2)是{}。在

因此,从未设置属性sum_a,因为从未调用_add_first_nmb。在

您的check方法等效于:

^{pr2}$

你可能想

def check(self, a, b):
    return not a == b

相关问题 更多 >