【问题标题】:Need help in understanding variables with Operator overloading in python [duplicate]需要帮助理解python中运算符重载的变量[重复]
【发布时间】:2019-01-16 13:49:37
【问题描述】:

需要帮助理解以下代码中的变量。

class Student:
def __init__(self,m1,m2):
    self.m1 = m1
    self.m2 = m2
def __add__(self, other):
    m1 = self.m1 + self.m2 <---- doubt
    m2 = other.m2 + other.m2
    s3 = Student(m1,m2)
    return s3


s1 = Student(50,60)
s2 = Student(70,80)

s3 = s1 + s2
print (s3.m1)

所以我在这里得到了所需的 110 输出。但我的问题是为什么 add 函数中的变量应该只声明为 m1 而不是任何其他变量。它是否必须与“init”函数中的变量名匹配?如果是,那是什么原因。

【问题讨论】:

  • 我不确定我是否理解您的问题,您的意思是这是否可行:anything = self.m1 + self.m2 等?
  • 是的!!为什么只有 m1 = self.m1 + self.m2 有效,但 a1 = self.m1 + self.m2 给我一个错误?
  • @BhargavMg 你确定吗?请发送问题代码和您遇到的错误。
  • "m1 = self.m1 + self.m2 有效,但 a1 = self.m1 + self.m2 给我一个错误"只有在您忘记将 m1 的所有引用更改为 a1 时才有可能,例如Student(m1,m2)Student(a1,m2).
  • 1) 将该代码放入问题中,而不是评论。 2) 为什么你认为s3 有一个a1,而你没有将它保存在任何地方?

标签: python


【解决方案1】:

名称无关紧要,只是为了使其更具可读性的约定,这应该也可以:

def __add__(self, other):
    a1 = self.m1 + self.m2 
    m2 = other.m2 + other.m2
    s3 = Student(a1,m2)
    return s3

请注意您必须修改m1 两次(但在selfother 中保持不变)

编辑:代码中似乎有一些错误,m2 出现了 3 次,m1 只出现了一次

【讨论】:

  • 您好,请查看以下代码。学生班: def __init__(self,m1,m2): self.m1 = m1 self.m2 = m2 def __add__(self, other): a1 = self.m1 + self.m2 a2 = other.m2 + other.m2 a3 = Student(a1,a2) return a3 s1 = Student(50,60) s2 = Student(70,80) s3 = s1 + s2 print (s3.a1) print (s3.a1) AttributeError: 'Student' 对象没有属性“a1”
  • 好吧,如果这就是你的意思,那么是的,类成员的名称是在__init__ 中定义的,它们不能更改。 a1a2 只是在 __add__ 期间存储的临时变量,然后在运行完成后被丢弃
  • 知道了。谢谢:)
猜你喜欢
  • 1970-01-01
  • 2020-10-19
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 2017-11-14
  • 1970-01-01
相关资源
最近更新 更多