2011-01-05 56 views
1
class Complex: 
    realpart,imagpart=0,0 
    def __init__(self): 
      self.r = Complex.realpart 
      self.i = Complex.imagpart 

x = Complex() 

上面的代码工作,XR,X1 =(0,0),但在类名大,访问类的数据Class_name.Data_member方式看起来非常多余的,没有任何改进类范围的方法,所以我不必使用Complex.imagpart?只需使用self.r = realpart?Python类的命名空间和初始化函数

+1

1.不,这不是Visual Basic。 2.为什么不使用内建的'complex'类型? – AndiDog 2011-01-05 18:11:07

+0

显然不可能(没有大幅修改语言,但是你不会达到目的) - 但是'C = ReallyReallyLongClassName'并且使用'C.realpart'来代替?并考虑它是否应该是一个类级别的常量......(编辑@AdniDog:你错过了重点,VB并不是唯一一个与Python不同的范围,并且类名只是一个 - 尽管不是很好 - 例如) – delnan 2011-01-05 18:11:17

+0

以任何方式,在Python中缩短语句没有用处。 'C = WayTooLongClassName'是一个解决方案,但我不记得曾经在Python中使用过类似的东西。我通过意图选择VB作为示例,因为那里的陈述可能会变得很长。 – AndiDog 2011-01-05 18:17:44

回答

1

这是你想要做什么:

class Complex(object): 
    def __init__(self, realpart=0, imagpart=0): 
     self.realpart = realpart 
     self.imagpart = imagpart 

访问成员变量是“self.realpart”调用。你正在使用的类属性是这样访问的:

Complex.some_attribute 
+0

嗨,复杂(对象)中的对象有什么用? – 2011-01-05 18:47:20

+0

它是从它继承的。所有新风格的类最终都从'object'继承。例如,要创建一个从'Complex'继承的'SuperComplex'类,您可以将它写为'class SuperComplex(Complex):' – Aphex 2011-01-05 18:57:57

+0

thx以获得答案,这很有帮助! – 2011-01-05 19:03:32

0

否。上面指定的数据成员是类的属性,因此需要指定类名。如果您愿意,可以使用self.r = self.__class__.realpart。看起来好像你只是使用这些值作为初始化器,所以realpartimagpart根本就是多余的。

(另请注意,Python有复杂的数字原生支持只写如5 + 3J他们。)

相关问题