2012-06-28 63 views
2

我是Python新手(來自MATLAB),並開始瞭解類是模塊化程序的好方法。我知道他們就像一個可以簡化流程的「藍圖」,但我認爲我對此的理解是錯誤的。我是讀documentation和整個這個例子就是:用python中的類的澄清

(3.0, -4.5) 

輸出

class Complex: 
    def __init__(self, realpart, imagpart): 
     self.r = realpart 
     self.i = imagpart 

x = Complex(3.0, -4.5) 
x.r, x.i 

它難倒我。有沒有被稱爲realpartimagpart傳遞的功能,但他們被改名爲ri和立刻開始工作。它們似乎也不是以功能建造的。 realpartimagpart如何做?

注:我的曖昧標題和標籤道歉,我真的不知道這是什麼會被調用。我會很感激的建議。

+0

兩個很好的答案。爲MATLAB用戶切換到python; Python中的__init__函數傳遞的信息與MATLAB的函數有很大不同!感謝帝斯曼提供了一個擴展的答案。 – Ason

+0

'__init__'函數「類內部」明顯不同於MATLAB的函數,因爲'__init__'它創建一個類的實例,在這種情況下是Complex。在MATLAB中,您定義了將值傳遞給函數並返回某種結果的函數。 Python也可以這樣做,但是你在這裏做的是實例化一個對象,所以你將'realpart'和'imagpart'存儲在對象中。與python不同,MATLAB不是面向對象的,儘管它與功能對象有些接近。 – carmenism

+0

@nullpointer謝謝你的闡述! – Ason

回答

3

如何realpart和imagpart做什麼?

他們沒有做任何事情:他們只是給予__init__的參數的名字。如果我們喜歡,我們可以稱它們爲applepear。當您鍵入

x = Complex(3.0, -4.5) 

__init__傳遞三個參數:

def __init__(self, realpart, imagpart): 

實例本身(傳統上被稱爲self),通過(3.0)的第一個明確的說法,而第二明確的參數傳遞(-4.5 )。然後將它們作爲實例變量存儲在self.rself.i中。

+0

所以,通過調用x = complex(3,-4.5),我真的在給'realpart'和'imagpart'一個值嗎?那麼可以用它們的較短的名稱'r'和'i'來調用? – Ason

+0

你正在閱讀的代碼?你不能忽略'__init__'中的含義。你可以用'r'和'i'來引用它們的原因是因爲代碼將這些較短的名稱分配給它們。他們不會奇蹟般地得到額外的名字。 – BrenBarn

+0

哇,好吧..我肯定是想着這個倒退了。感謝你們。 – Ason

3

realpartimagpart是類初始化程序__init__的參數。當您致電Complex(3.0, -4.5)時,這些參數將傳遞給該函數。該函數碰巧在對象上設置了一些屬性來保存這些參數的值。它是這樣做的:

self.r = realpart 
    self.i = imagpart 

這些行在對象上創建屬性。當您創建一個名爲x的對象時,它將具有可訪問的這些屬性,如x.rx.i

我不知道你爲什麼問叫realpart和imagpart「功能」。他們只是普通的變數。

你應該閱讀the Python tutorial以熟悉的Python的基本知識。