2011-01-05 160 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他們。)