2016-03-06 32 views
1

當我編碼的東西每一次,它是非常簡單,只是1文件沒有任何類(只是一堆的方法),我將通過命令行運行它。是否所有的代碼都應該在類中 - 只有主類被調用一次?

這當然是一個非常糟糕的做法,不能真正適用於任何更大的應用程序。

現在我終於想要構建更大的東西了,我對代碼的執行位置感到困惑。我們舉個例子吧。

我有一個人擁有物品的json文件,我還有另外一個json文件,每個物品的價格以及我已經擁有的數量(數量越多=提供的價格越低等)。

現在我想向這個人提出要約,說明哪些物品以及從他那裏購買了多少物品。

這是我設計的支出:

class Person(object): 
    ... 
    def getInventory(self): 
     return self.inventory 

class Inventory(object): 
    ... 
    def getInventory(self): 
     return self.inventory 

class Main(object): 
    person1 = Person(someArgs) 
    haveInventory = Inventory(someArgs) 

    def run(self): 
     ... do calculations ... 

main = Main() 
main.run() 

這是否有道理?

P.S .:我自己的庫存和人的庫存有不同的結構,因此庫存不能真正成爲人的子類。

+2

這看起來像你試圖寫Java的Python編寫的。請不要那樣做。順便說一句,你不能有「1個文件沒有任何類(只是一堆的方法)」,因爲方法是屬於類,即他們是一個特殊的屬性的功能也許你的意思是「1個文件沒有任何類(只是一堆功能)」。 –

+2

有幾乎從來沒有一個已經被稱爲「主」一類的情況,因爲你已經在你的文件中的'__main__'。最重要的是這讓很少的意義從OOP的角度有一個叫做'main'類,因爲什麼樣的對象它代表反正 –

+0

@wobbily_col:這不是_particularly bad_ Python代碼,但它往往是多個v比需要的要多,例如不必使用getters和setter,而不用簡單的屬性訪問。當然,有時候類需要getter和setter,但是Python的描述符語法對調用者來說是透明的。 –

回答

0

沒有什麼錯獨立的功能,如果他們是獨立的。如果他們對一個對象的屬性進行操作,則創建一個類並使其成爲該類的方法。

有一個main函數是很好的做法,並調用,如果並且只有你的python文件正在直接運行。 (這意味着你可以將文件導入其他文件,並使用這些類)。因此更多的東西一樣:

class Person(object): 
    ... 
    def getInventory(self): 
     return self.inventory 

class Inventory(object): 
    ... 
    def getInventory(self): 
     return self.inventory 

def main(): 
    person = Person(someArgs) 
    haveInventory = Inventory(someArgs) 
    ... do calculations ... 

if __name__ == "__main__": 
    # execute only if run as a script 
    main() 

...但不要害怕的功能。你不要使用類(這是重複「PM 2Ring」的評論的另一種方式:「請不要嘗試在Python中編寫Java)

+0

如果我的應用程序具有GUI,會發生什麼情況?我是否在給定的GUI對象的某種方法內進行計算,或者在哪裏做數據的「填充」?我的觀點是 - 我可以創建所有這些類,將它們初始化爲我想要的東西等,但我在哪裏與他們做'東西'? – emihir0

+0

您可以按照GUI框架的示例中所示的設計進行操作。作爲一般規則,你在類的方法中用你的類做「東西」。 (對於GUI框架來說,你的GUI類通常來自框架類,當用戶點擊你的按鈕或其他東西時,你的方法會被調用。) –

+0

爲什麼你要實現一個'main()'函數,如果你所做的就是在'__main__'中使用它呢?只是內聯它的實現,然後你也會非常肯定的是,它從來沒有用於期望的上下文。 –

相關問題