【问题标题】:Usage of 'self' keyword inside a method在方法中使用“self”关键字
【发布时间】:2017-06-29 22:31:45
【问题描述】:

考虑以下示例代码:

class Student:
    def __init__(self, *args):
        self.scores = args

    def calculate_sum(self):
        return sum(self.scores)

scores = list(map(int, input().split()))
s = Student(scores)
print("sum:", s.calculate_sum())

当我调用此方法时,出现以下错误:

TypeError:+ 的不支持的操作数类型:'int' 和 'list'

但是,如果我从属性分数中删除“self”关键字,它可以正常工作:

def calculate_sum(self):
    print(sum(scores))

注意:输入是一行中以空格分隔的整数。例如。 100 67 78

有人能解释一下为什么会发生这种情况以及 TypeError 消息的含义(我正在将 int 添加到列表中吗?!)?

【问题讨论】:

  • 能贴出完整的代码吗?
  • 您的scores 列表可能是列表列表吗?
  • self.scoresscores 是两个完全不同的引用,它们实现了不同的目标。尝试删除 sum() 调用并查看输出。你应该会看到两种不同的东西出现
  • @VictorC.: 不,请注意 sum 首先以 隐式 0 开头。所以sum([[1,4]])会报错。
  • @KanishkDugar 你在做self.scores = args,但是 args 是一个参数列表,所以你要么需要把它改成 def __init__(self, scores): self.scores = scores 要么 def __init__(self, *args): self.scores = args[0]

标签: python python-3.x


【解决方案1】:

首先,'scores' 作为列表而不是 *args 发送。所以这是不正确的,这使得 self.scores 成为一个带有列表的元组。

其次,它只使用“scores”而不是“self.scores”,因为“scores”也是一个全局变量,它是一个列表。

感谢 @NieDzejkob 和 @WillemVanOnsem 帮助我解决这个问题。

【讨论】:

    猜你喜欢
    • 2011-05-14
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多