2013-11-05 20 views
0

讀取問題蟒蛇「類」字問題的探析

編寫具有以下數據屬性一類名爲汽車:

__year_model(用於汽車的年型)

__make(用於汽車的化妝汽車)

__speed(用於汽車的當前速度)

的T他的汽車類應該有一個接受汽車年模型並作爲參數的方法。它還應該將0賦值給__speed數據屬性。

類也應該有以下幾種方法:

•加快 的加速方法應該添加5〜每次調用實時數據屬性的速度。

•制動器 制動方法每次調用時應該從速度數據屬性中減去5。

•該get_speed 的get_speed方法應該返回當前速度

接下來,設計,創建一個汽車對象的程序,然後調用加速方法五倍。在每次調用加速方法後,獲取汽車的當前速度並顯示它。然後調用制動方法五次。在每次調用制動方法後,獲取汽車的當前速度並顯示它。

我收到提示TypeError: __init__() missing 3 required positional arguments: 'year', 'make', and 'speed'

我的代碼:

#create class called car 

class Car: 
    def __init__(self,year,make,speed): 
     self.__year_model=year 
     self.__make=make 
     self.__speed=0 

    #set the arguments for speed,year, and make 
    def set_year_model(self,year): 
     self.__year_model=year 

    def set_make(self,make): 
     self.__make=make 

    def set_speed(self,speed): 
     self.__speed=0 

    #the returns for speed, year, and make 
    def get_year_model(self): 
     return self.__year_model 

    def get_make(self): 
     return self.__make 

    def get_speed(self): 
     return self.__speed 


    #methods 
    def accelerate(self): 
     self.speed +=5 

    def brake(self): 
     self.speed-=5 

    def get_speed(self): 
     return self.speed 

#actuall program 
#create car object 
def main(): 
    my_car=Car() 

    year=print(input('car year: ')) 
    make=print(input('car make: ')) 
    speed= print('Current speed is 0') 

    #accelerate 5 times 

    my_car.accelerate() 
    print('My current speed:',my_car.get_speed()) 
    my_car.accelerate() 
    print('My current speed:',my_car.get_speed()) 
    my_car.accelerate() 
    print('My current speed:',my_car.get_speed()) 
    my_car.accelerate() 
    print('My current speed:',my_car.get_speed()) 
    my_car.accelerate() 
    print('My current speed:',my_car.get_speed()) 

    #brake five times 
    my_car.brake() 
    print('My current speed after brake:',my_car.get_speed()) 
    my_car.brake() 
    print('My current speed after brake:',my_car.get_speed()) 
    my_car.brake() 
    print('My current speed after brake:',my_car.get_speed()) 
    my_car.brake() 
    print('My current speed after brake:',my_car.get_speed()) 
    my_car.brake() 
    print('My current speed after brake:',my_car.get_speed()) 

main() 
+5

你實際上是一門Python課程嗎?所有'get_'和'set_'都不是必須的.​​.....事實上,在Python中使用類是一個相當可怕的介紹... –

+1

此外,雙下劃線屬性也是非常糟糕的形式。如果你不知道你爲什麼需要他們,你不應該使用他們。 – zigg

回答

0

錯誤消息告訴你到底發生了什麼問題。您已經定義Car需要三個參數:

def __init__(self, year, make, speed): 

但是當你創建一個,你沒有通過任何這些:

my_car = Car() 

看到了嗎?括號中沒有任何內容。顯然這需要是:

my_car = Car(year, make, speed) 

現在當然,你不能這樣做,因爲你還沒有要求這些項目。因此在之後從用戶處獲得該信息後創建my_car

+0

是的,你的代碼還有其他的問題......例如,你在所有的'input's前面都有一個'print' ......現在顯然你已經把'int'放在裏面了,但忘記了關閉括號(所以你實際上並沒有運行你發佈的代碼),但這與你提出的問題沒有任何關係。 – kindall

+0

哦,好吧,這是有道理的 – nixvaldez

+0

我如何刪除正在打印的「無」? – nixvaldez

2

__init__Car類需要你不傳遞任何三個參數。

year=input('car year: ')) 
make=input('car make: ')) 
speed=0 
print'Current speed is', speed 
#actuall program 
#create car object 
def main(): 
my_car=Car(year, make, speed) 

你不需要input之前那些print語句。我不確定你想要做什麼。另外speed= print('Current speed is 0')是不正確的。

該函數總是將速度設置爲零,如果這是你打算的話,則不需要傳遞參數speed。如果你還沒有使用它,就不需要傳遞參數。

def set_speed(self,speed): 
    self.__speed=0