2015-04-02 67 views
0

我對linux中的python腳本非常陌生,並且在終端中執行它們。我正在嘗試調試幾個互相交互的腳本,但我不明白如何在命令行中訪問腳本的某些部分。下面是我正在練習的示例測試腳本。使用類和函數在命令行中調試Python

文件名爲:

test.py 

的腳本是:

class testClass(): 

    def __init__(self, test): 

     self.test = test 

    def testing(): 

     print "this wont print" 


def testing2(): 

    print "but this works" 

在終端,如果我去到該文件所在的文件夾,然後嘗試打印測試()函數

python -c 'import test; print test.testClass.testing()' 

我得到一個錯誤說

Traceback (most recent call last): 
File "<string>", line 1, in <module> 
TypeError: unbound method testing() must be called with testClass instance as first argument (got nothing instead) 

但如果我嘗試打印testing2()函數

python -c 'import test; print test.testing2()' 

它將打印「但這部作品」

我怎麼會去執行測試()函數,使其打印。我嘗試過把各種論點放在那裏,但沒有任何作用。

感謝

+1

'testing2()'是一個函數,而'testClass.testing()'是一個**方法**。您需要先創建一個'testClass'的實例,然後在該實例上調用'testing()'。但爲了實現這一點,你需要使''(')'將'self'作爲第一個參數(或者將其定義爲一個靜態方法,如果這是你真正想要的)。 – 2015-04-02 15:32:46

+0

另外,沒有理由使用非常有限的'python -c'...''。相反,通過在你的shell上運行'python'(從同一個工作目錄)啓動一個[交互式Python解釋器](https://docs.python.org/2/tutorial/interpreter.html#interactive-mode),然後輸入相同的語句,並享受[交互式檢查](https://docs.python.org/2/tutorial/introduction.html#using-python-as-a-calculator)您的代碼的好處。 – 2015-04-02 15:48:09

+0

是的,我甚至不知道這是一件事哈哈。將從現在起用 – 2015-04-02 15:52:42

回答

1

你的類應該是:

class testClass(): 
    def __init__(self, test): 
     self.test = test 

    def testing(self): 
     print "this wont print" 

的方法需要用的testClass一個實例被稱爲:

test.testClass("abc").testing() 

其中​​代表你test__init__說法。或者:

t = test.testClass("abc") 
test.testClass.testing(t) 

作爲一個shell命令:

python -c 'import test; print test.testClass("abc").testing()' 

有關更多信息,請參見Difference between a method and a functionWhat is the purpose of self?

+0

得到它的所有幫助 – 2015-04-02 15:51:50