2016-09-13 11 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

それは本当に何もしないself.currentproperty methodを参照する場合、それは特に何もすることができる唯一の方法は、@Danielはコメントで言ったように、です。以下のような何か:

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

    def next(self): 
     ... 

この方法で、self.currentを呼び出すには、実際に何かをするだろう。

しかし、プロパティはちょうどプロパティ、それが何かすることになっている場合、それはメソッドでなければならないので、それは間違いなく良いプラクティスとはみなされません。

+1

時々、レイジープロパティを強制的に計算するなど、実際には便利なことがあります。しかし、彼の例のように、それは前の行の右に計算された、いずれかの呼び出しが悪い副作用を持っている、またはそうでないと、それを呼び出すと、二度目は無用になります。 – spectras

+0

はい、大きな洞察です。ゲッターやセッターのような他の複数の言語です。次の句の – 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" 
関連する問題