2016-01-19 218 views
0

有人可以幫助我/告訴我如何解決此代碼? 我發現了一個錯誤:python初學者:class

TypeError: get_color() missing 2 required positional arguments: 'self' and 'color'

class Automobile: 
    def __init__(self, color): 
     self.color = color 

    def get_color(self, color): 
     input("Enter number") 
     if self.color == 1: 
      print("white") 

def main(): 
    Automobile.get_color() 
main() 
+0

請編輯您的問題,以表明其實際存在問題。正如猜測你的縮進看起來不正確。 – ajshort

+0

歡迎使用堆棧溢出。我通過使用領先的> –

回答

1

您首先需要實例化類的對象。使用這個你可以撥打get_color()

auto = Automobile(1) 
auto.get_color() 

也可以考慮重寫你的get_color到:

def get_color(self): 
    if self.color == 1: 
     return "white" 
    else: 
     return "none" 

作爲當前實現並沒有真正做你所期望一個名爲get_color做功能。

+0

標記了錯誤如果我想添加更多顏色,該怎麼辦? – mac

+0

所以你想讓你的汽車有多種顏色? – jacob

+0

我想提示用戶輸入數字(1,2或3),並根據它們的選擇輸出它被分配的顏色。 – mac

1

從我讀取代碼的方式來看,它看起來像是在試圖讓get_x方法執行set_x方法的典型做法。此外,基於具有

if self.color == 1: 
print(white) 

我想你想1映射到白色,然後也許2到黑,3藍,等你的代碼?

我會先處理最後一部分。通常情況下,如果你想圖什麼別的東西(在這種情況下,一些以顏色),你是最好的關閉使用字典:

color_dict = {1: 'white', 
       2: 'black', 
       3: 'etc.',} 

然後,您可以撥打電話(例如)通過書面形式白

>>>print(color_dict[1]) 
'white' 

現在,在課堂上,我將向您展示兩種不同的方法來做我想做的事情。

選項A:老派的getter/setter方法:

class Automobile: 
def __init__(self, color): 
    self.color_dict = {1: 'white', 
         2: 'black', 
         3: 'etc.',} 

    self.color = self.color_dict[key] 

def get_color(self): 
    return self.color 

def set_color(self, key): 
    self.color = self.color_dict[color] 

從這裏開始,那麼,你可以撥打:

>>>auto = Automobile(1) 
>>>print(auto.get_color()) 
'white' 
>>>auto.set_color(2) 
>>>auto.print(auto.get_color()) 
'black' 

這將工作的偉大,我認爲它是幹什麼的你」喜歡。

有在Python 3較新的方法,但它使用的裝飾(你會在第二個看到,他們開始用「@」,他們是那種很難理解)

選項B:新風格的基於財產的方法

class Automobile: 
    def __init__(self, color): 
     self.color_dict = {1: 'white', 
          2: 'black', 
          3: 'etc.',} 

     self.color = color 

    @property 
    def color(self): 
     return self._color 

    @color.setter 
    def color(self, key): 
     self._color = self.color_dict[key] 

這裏的用法有點不同。它開始是相同的:

>>>auto = Automobile(1) 
>>>print(auto.color) 
'white' 

不過,改變的,而不是用函數的顏色,你修改屬性與=

>>>auto.color = 2 
>>>print(auto.color) 
'black' 

希望幫助!

0

通過鍵入Automobile.get_color()您正在告訴課程本身汽車來告訴你它的顏色。

但是,Automobile作爲一個類沒有顏色!

一個類是該類的實例擴展的藍圖或計劃的價值和功能。例如,你需要說:

NissanLeaf = Automobile(2) 爲了說你有黑色日產葉。

然後,你可以去NissanLeaf.get_color()爲了找出汽車確實是黑色的。

一種實例,換言之,是通過使用的類作爲藍圖構建的實際創建。爲了看到一個對象的屬性,它需要是一個實際的創造,而不僅僅是它的想法。

可以通過在類名後加括號,然後用在類的__init__函數中設置的任何參數填充括號來製作對象的實例。

例如:

class Human: 
    def __init__(self, age, height): 
     self.age = age 
     self.height = height 

是藍圖,

John = Human(27, 71) 

是類人的實例,從中我們可以

print John.age 
>>> 27 

檢索數據。

希望有幫助!