我尝试创建一个复数类。我在类中有一个add方法,它在添加后返回一个新的复数,而不改变参数复数。
码
class complex:
real = 0.00
imag = 0.00
def __init__ (self,r,i):
complex.real = r
complex.imag = i
def add(comp1, comp2):
x = comp1.real + comp2.real
y = comp1.imag + comp2.imag
result = complex(x,y)
return result
此代码有问题。我找不到它了。请告诉我哪里出错了。
我也试过传递自我对象,但它没有起作用。 def add(self, comp):
答案 0 :(得分:2)
class complex: real = 0.00 imag = 0.00 def __init__ (self,r,i): complex.real = r complex.imag = i
complex
的所有实例全局相同的类属性。您只想将这些值分配给self
,而不是complex
本身。def add(comp1, comp2): x = comp1.real + comp2.real y = comp1.imag + comp2.imag result = complex(x,y) return result
self
参数,或者您想要制作方法a @staticmethod
。正确实施:
class Complex:
def __init__ (self, real=0.00, imag=0.00):
self.real = real
self.imag = imag
def add(self, comp):
return Complex(self.real + comp.real, self.imag + comp.imag)
c1 = Complex(1, 2)
c2 = Complex(3, 4)
c3 = c1.add(c2)
答案 1 :(得分:1)
当你这样做时 -
complex.real = r
complex.imag = i
这就是您遇到问题的原因,当您创建complex
类的新实例时,该类的real
和imag
值会更改为新值,这是反映在复杂对象的所有实例中。
real
和imag
实际上是类变量,它们在类的所有对象/实例中共享。您应该将它们定义为实例变量 -
def __init__ (self,r,i):
self.real = r
self.imag = i
self
指向当前实例,因此当您执行时 - self.real
它指向当前实例/对象的real
变量。
答案 2 :(得分:1)
在__init__
中,您应该引用self
而不是complex
来获取对象/动态属性,否则您将其修改为类/静态属性:
def __init__ (self,r,i):
self.real = r
self.imag = i