python中的语句变量?

问题描述:

我正在阅读一些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'是一个带有属性装饰器的方法,并且该方法有副作用?但这是编写代码的一种非常奇怪的方式。 –

这真的没有做任何事情,它可以做什么特别的唯一途径,如@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))。 –

我意识到这可以用来检查属性/方法是否实际存在于传递的参数中。可能对输入健全性检查有用。

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