2016-09-13 96 views
3

我正在閱讀一些python代碼,並遇到此問題。由於我主要編寫C和Java(因爲語句甚至沒有用這些語言編譯),我不確定它在python中是什麼。python中的語句變量?

self.current,「變量作爲語句」是什麼意思?這只是某種方式來打印變量,或者這是一個特殊的語法事件/練習在處理python中的異常?

class PriorityQueue(): 

    def __init__(self): 
     self.queue = [] 
     self.current = 0 

    def next(self): 
     if self.current >=len(self.queue): 
      self.current 
      raise StopIteration 

     out = self.queue[self.current] 
     self.current += 1 

     return out 
+3

你碰巧有班裏的其他人嗎? – iScrE4m

+0

它根本沒有做任何事情,它可以自由移除而沒有任何後果。它甚至不打印任何東西。很難說如果不知道該成員的背景,也許它正在做一些偷偷摸摸的黑魔法,但沒有想到。 – CoryKramer

+2

它本身並沒有做任何事情。也許'current'是一個帶有屬性裝飾器的方法,並且該方法有副作用?但這是編寫代碼的一種非常奇怪的方式。 –

回答

3

這真的沒有做任何事情,它可以做什麼特別的唯一途徑,如@Daniel說,在評論是,如果self.currentproperty method。像下面這樣:

class X(): 
    @property 
    def current(self): 
     mail_admins() 
     return whatever 

    def next(self): 
     ... 

這樣,調用self.current,實際上會做一些事情。

但無論如何它的絕對不被認爲是良好的做法,因爲屬性就是這樣一個屬性,如果它應該做某件事情,它應該是方法。

+1

有時它實際上可能很有用,例如強制現在計算一個懶惰屬性。但正如在他的例子中,它的計算正確的是前一行,無論是調用有副作用,這是不好的,或者沒有,並且第二次調用將是無用的。 – spectras

+0

是的,這是一個很好的見解。這就像多種其他語言的getter和setter一樣。 – xxbidiao

+0

在下一個子句中的原地添加使得這不太可能(儘管可能!)(http://stackoverflow.com/questions/11987949/how-to-implement-iadd-for-a-python-property))。 –

0

我意識到這可以用來檢查屬性/方法是否實際存在於傳遞的參數中。可能對輸入健全性檢查有用。

def test(value): 
    try: 
     value.testAttr 
    except AttributeError: 
     print "No testAttr attribute found"