python 类self的行为类似于整数

mfuanj7w  于 2022-12-21  发布在  Python
关注(0)|答案(1)|浏览(185)

我不明白为什么。它会引发一个错误'int'对象没有属性'v',但我想访问self.v.当我只打印self时,它会打印一些数字。我不明白发生了什么。这是我的代码。

class Candidate:
    def __init__(self,val,pscore,nscore):
        self.v = val
        self.p = pscore
        self.n = nscore

    def __str__(self):
        return f"{self.v} ({self.p},{self.n})"

    def check_plus_pos(self, guessval):
        count = 0
        b = self.v
        a = str(b)
        guessval = str(guessval)
        for i in range(0,len(a)):
            if a[i] == guessval[i]:
                count += 1
        return count

    def check_neg_pos(self, guessval):
        count = 0
        b = self.v
        a = str(b)

        guessval = str(guessval)
        for i in range(0,len(a)):
            for j in range(0,len(guessval)):
                if a[i] == guessval[j] and a[i] != guessval[i]:
                    count += 1
        return count

    def consistent(self, guess):
        if Candidate.check_plus_pos(self,guess.v) == guess.p and Candidate.check_neg_pos(self,guess.v) == guess.n:
            return True
        else:
            return False

问题发生在b == self.v,我想将self.v值赋给一个变量。

cpjpxq1n

cpjpxq1n1#

老实说,很难理解代码/类应该做什么,但它需要一些严重的重构。
我猜你应该:

*示例化你的类

  • 将方法用作示例方法,因此使用self而不是类名调用它
    *显式传递self
    *不要使用不常用的缩写
  • doNOT使用单字母变量a表示字面上没有任何内容
  • 对非平凡函数使用文档字符串(或者作为大多数函数/方法的经验法则)
  • 使用类型提示,这将帮助您自动捕获此类错误(如果您将IDE配置为)
  • 完全去掉对b的赋值,它没有被重用,看起来也没有做任何事情。
... # all the class related code above
    def check_neg_pos(self, guessval):
        count = 0
        a = str(self.v)

        guessval = str(guessval)
        for i in range(0,len(a)):
            for j in range(0,len(guessval)):
                if a[i] == guessval[j] and a[i] != guessval[i]:
                    count += 1
        return count

    def is_consistent(self, guess: Candidate)->bool:
        return bool(self.check_plus_pos(guess.v) == guess.p and self.check_neg_pos(guess.v) == guess.n)
# Example usage
candidate_1 = Candidate(1,2,3)
candidate_2 = Candidate(4,5,6)
candidates_consistent = candidate_1.is_consistent(guess=candidate_2)
print(candidates_consistent)

相关问题