2013-01-24 22 views
-2

我還是讓我的周圍Python類頭,不知道什麼是錯的Python類代碼

class Triangle(object): 
    def __init__(self, angle1, angle2, angle3): 
     angle1 = self.angle1 
     angle2 = self.angle2 
     angle3 = self.angle3 
    number_of_sides = 3 
    def check_angles(angle1, angle2, angle3): 
     if angle1+angle2+angle3 == 180: 
      return True 
     else: 
      return False 

my_triangle = Triangle(30, 60, 90) 
print(Triangle.number_of_sides) 
print(Triangle.check_angles) 

那麼,什麼是錯的?

#1有一些非常平均的用戶,我來自MathStackExchange和人民,因爲他們在這裏做的沒有downvote新手/小白的問題一樣多。

+4

不少東西,其實。 – NPE

+1

檢查角度現在需要三個參數。 – Chriseyre2000

+0

可能只是因爲更多的新手在嘗試學習Python而不是數學...... – martineau

回答

5

你有你的任務落後:

self.angle1 = angle1 

關於正在發生的事情一點點可以幫助這裏的思考。 self是在傳遞的類Triangle的實例。所以,

T = Triangle() 
T.method_call() #basically the same as `Triangle.method_call(T)` 

method_callselfT參考。 (__init__是一種魔術 - 它得到的第一行自動調用,但原則仍然是相同的)。一旦你知道,這很容易理解爲什麼你需要self.whatever = whatever - 你把一個新的屬性對象T上!
最後,這說明你應該怎麼寫check_angles

def check_angles(self): 
    #remember, `self` is a reference to a triangle instance -- T in our hypothetical code 
    #so we can use `self` to gain access to all the attributes we set in `__init__`. 
    if self.angle1 + self.angle2 + self.angle3 == 180: 
     return True 
    else: 
     return False 

現在快速轉入類屬性。你可以把屬性到類以及:

class Triangle: 
    number_of_sides = 3 

我覺得這是習慣定義定義你的方法(函數)之前類屬性,但你實際上並不需要。 (這將有助於你的代碼的讀者,雖然明白 - 我誤解了,因爲你做事情的順序的原密碼)。

可以動態屬性添加到一個類的類已創建好以後:

class Triangle: 
    ... 

Triangle.number_of_angles = Rhombus.number_of_angles - 1 

您可以訪問Triangle.some_attribute幾種方法。第一種方式是直接通過課程(Triangle.number_of_sides)。第二種方式是通過一個實例:

T = Triangle() 
T.number_of_sides 

起初這似乎有點有趣。畢竟,該實例沒有number_of_sides屬性。事實證明,Python是設計看起來在實例第一,看它是否有它自己的number_of_sides屬性。如果確實如此,那很好,那就是你得到的。但是,如果它不能,python會查看該類的屬性。這變成了一種便捷的方式來在一個類的實例之間共享數據。

+0

而'check_angles'需要改變...(並且不在打印中調用)... –

+0

謝謝!我認爲在分配變量時,無論變量是在等號的左邊還是右邊都沒有關係。 –

+1

@algebr - 作業的順序很重要(並且它很重要!):-)。快樂的編碼。 – mgilson

1

我想你的意思是寫這樣的構造:

class Triangle(object): 
    def __init__(self, angle1, angle2, angle3): 
     self.angle1 = angle1 
     self.angle2 = angle2 
     self.angle3 = angle3 
1

即時猜測這是Python Koans鍛鍊。大圖書館,祝你好運!

我相信你有兩個問題。

首先是作業。自我在左邊。

其次是您的方法創建。你需要通過自變量和引用的屬性,例如

class Triangle(object): 
    def __init__(self, angle1, angle2, angle3): 
     self.angle1 = angle1 
     self.angle2 = angle2 
     self.angle3 = angle3 
     self.number_of_sides = 3 
    def check_angles(self): 
     if self.angle1 + self.angle2 + self.angle3 == 180: 
      return True 
     else: 
      return False 
1

沒有很多的解釋,所以你可以從它自己的學習,這裏是寫你的類,並使用它的方式,將工作:

class Triangle(object): 
    def __init__(self, angle1, angle2, angle3): 
     self.angle1 = angle1 
     self.angle2 = angle2 
     self.angle3 = angle3 
    number_of_sides = 3 
    def check_angles(self): 
     return self.angle1+self.angle2+self.angle3 == 180 

my_triangle = Triangle(30, 60, 90) 
print(Triangle.number_of_sides) 
print(my_triangle.check_angles()) 

輸出:

3 
True 
相關問題