2014-10-30 38 views
-2

我不明白創建類時實例的​​重要性。在一本關於Python編程的書中,我發現了關於創建一個轉換度量單位的類的示例: 因此,類參數是初始單位,新單位和轉換因子。python中類的實例的重要性

class ScaleConverter: 
     def __init__(self, units_from, units_to, factor): 
     self.units_from = units_from 
     self.units_to = units_to 
     self.factor = factor 

     def description(self): 
      return "Convert " + self.units_from + "to" + self.units_to 

     def convert(self, value): 
      return value * self.factor 

c1 = ScaleConverter("inches", "mm", 25) 

所以,我不明白,如果我離開了c1 = ScaleConverter("inches", "mm", 25) 我試圖將其清除和類作品無論如何會發生什麼。它的重要性是什麼?

+0

在什麼意義上「有效」? – khelwood 2014-10-30 11:40:39

+0

'試圖清除它並且類無論如何',請解釋。 – Abhijit 2014-10-30 11:40:56

+0

@khelwood無誤地運行。我不太清楚我需要向OP解釋什麼,因爲我很難理解他/她如何不理解。 – 2014-10-30 11:41:19

回答

1

c1 = ScaleConverter("inches", "mm", 25)創建類ScaleConverter的實例。如果沒有這一行,你正在定義一個類,但你並沒有創建一個實例 - 所以你沒有有效地做任何事情。一個類描述了該類的實例。

要使用一個類定義,創建該類的實例:

c1 = ScaleConverter("inches", "mm", 25) 

c2 = ScaleConverter("meters", "cm", 100) 

在上面,你現在有類ScaleConverter的兩個不同的實例(c1c2),你可以在使用它們其餘的代碼。這就是類和實例之間的區別:一個類就像一個藍圖,而一個實例是使用該藍圖製作的實際事物。

+0

但是,當我省略實例時,我可以在shell中「加載」類:A = ScaleConverter('meters','cm',100),我可以使用A沒有實例的方法 – Orlok 2014-10-30 11:58:41

+0

@Orlok:'在這種情況下,A'就是一個實例,它只是用一個大寫字母的變量。它與'a = ScaleConverter('meters','cm',100]''沒有區別。 – 2014-10-30 13:56:45

+0

所以問題是:當我在一個單獨的文件中創建一個類作爲模塊導入一個「主」作爲一個模塊時,我必須包括在class.py文件中的實例嗎? – Orlok 2014-10-30 15:00:21

1

請查看官方文檔。

使用notiation

c1 = ScaleConverter("inches", "mm", 25) 

創建一個新的ScaleConverter對象,並將其分配給您的c1變量。

類定義本身只是如何創建實例的藍圖。把它看作是一個對象遵守的模式或契約。


9.3.2. Class Objects

類對象支持兩種操作:屬性引用和實例。

屬性引用使用在Python中用於所有屬性引用的標準語法:obj.name。有效的屬性名稱是在創建類對象時位於類名稱空間中的所有名稱。所以,如果類的定義是這樣的:

class MyClass: 
    """A simple example class""" 
    i = 12345 
    def f(self): 
     return 'hello world' 

然後MyClass.iMyClass.f是有效的屬性引用,分別返回一個整數和一個函數對象。類屬性也可以分配給,所以你可以通過賦值來改變MyClass.i的值。 __doc__也是一個有效的屬性,返回屬於該類的文檔字符串:「一個簡單的示例類」。

類別實例化使用函數表示法。假設類對象是一個返回類的新實例的無參數函數。例如(假設上述類別):

x = MyClass() 

創建該類的新實例並將該對象分配給局部變量x。

+0

不確定文檔中這個龐大的複製粘貼內容有什麼意義。 – 2014-10-30 11:47:12

+0

但是我可以在每次爲類指定一個變量時在類之外創建一個實例。例如,我可以在shell中創建一個實例A = ScaleConverter('a','b',2),而無需在類對象創建中指定它,對吧? – Orlok 2014-10-30 12:07:03

+0

你需要知道的一切在第9章。 – 2014-10-30 12:39:23

0

ScaleConverter是你的班級。 c1是該類的一個實例。

當您運行c1 = ScaleConverter("inches", "mm", 25),你給C1中的類的屬性現在ScaleConverter

,你可以做C1以下,因爲它是類ScaleConverter的:

print c1.description 
"Convert inches to mm" 
print c1.convert(2) 
"50" 
1

通過使用對象的實例可以爲不同的操作使用相同的類。

類是一種用於構造對象的工廠。類的非靜態部分指定或描述對象將包含的變量和方法。 這將解釋對象與類的不同之處:程序運行時會創建和銷燬對象,並且如果使用相同的類創建對象,則可能會有許多具有相同結構的對象。

C1 = ScaleConverter( 「英寸」, 「毫米」,25)

這裏c1爲類ScaleConverter的實例對象。所以如果你想爲其他代碼使用其他參數,你可以創建其他對象。