2013-01-18 40 views
1

我想打印'好吧,謝謝'。當我在殼上運行它時,它會在單獨的行上打印,'謝謝'在'好的'之前打印。任何人都可以幫助我做錯了什麼?如何在python中的另一種方法中調用類方法?

>>> test1 = Two() 
>>> test1.b('abcd') 
>>> thanks 
>>> okay 

我的代碼

class One: 
    def a(self): 
     print('thanks') 

class Two: 
    def b(self, test): 
     test = One() 
     print('okay', end = test.a()) 

回答

0

print處理所得到的表達式前爲了評估功能。

def a(): print('a') 
def b(): print('b') 
def c(): print('c') 

print(a(), b()) 
print('a', b()) 
print ('a', b(), c()) 
print (a(), 'b', c()) 

輸出:

a 
b 
(None, None) 
b 
('a', None) 
b 
c 
('a', None, None) 
a 
c 
(None, 'b', None) 

所以,Python是通過它在打印之前評估的元組。在評估它時,方法'a'被調用,導致「感謝」被打印。

然後打印b中的聲明,結果打印出'okay'。

0

你的問題是,當你打電話給test.a()時,你打印一個字符串,而不是返回它。改變你的代碼做到這一點,它會工作得很好:

def a(self): 
    return 'thanks' 

通過你在你的問題說,它似乎並不像你需要使用end關鍵字參數print。只是通過test.a()爲另一種說法:

print('okay,', test.a()) 
0

要打印「好感謝」你One.a()應該返回一個字符串,而不是單獨的打印語句。

也不確定Two.b中的「test」參數是什麼,因爲您會立即將其覆蓋爲類One的實例。

class One: 
    def a(self): 
     return ' thanks' 

class Two: 
    def b(self): 
     test = One() 
     print('okay', end = test.a()) 

>>>> test1 = Two() 
>>>> test1.b() 
okay thanks 
>>>> 
0

我會嘗試這樣的事情,因爲它意味着你不必改變一類。這減少了必須更改的類的數量,這些類將變化和錯誤的範圍隔離開來;並保持一類行爲

class One: 
    def a(self): 
     print('thanks') 

class Two: 
    def b(self, test): 
     test = One() 
     print('okay', end=' ') 
     test.a() 
相關問題