1

私はそのような機能を持っているとしましょう

def spam():
    spam.eggs = "Foobar"
    #do stuff
    return

メソッドを実際に呼び出すことなく、別の関数でspam.eggs( )の値を取得したい。たとえば、"Foobar"spam()

def main():
  print spam.eggs

そして私はそれを返したいFoobar。ただし、spam() をまだ呼び出していないため、明らかにこれは機能しません。そのため、spam.eggsプロパティを割り当てたことがないため、これを行う必要があります。

def main():
    spam()
    print spam.eggs

spam()ただし、属性が必要な場合は関数を呼び出したくありませんeggs。実際、卵属性があるかどうかを確認し、呼び出す前spam()に等しいかどうかを確認します。"Foobar"

def main():
    if hasattr(spam,'eggs'):
        if getattr(spam, 'eggs') == "Foobar":
            spam()

でも前と同じように、私は電話をしていないので、まだspam割り当てられspam.eggsていません。

おそらくデコレータを使用して、これを行う方法はありますか? 割り当てを関数に少し近づけたいので、そうではないものを好みます

def func():
    setattr(spam, 'eggs', 'Foobar')

setattr()デコレータでない限り、別の方法でやらなければならないところ。

4

3 に答える 3

1

単純明快な spam.eggs で属性を取得します。ところで、属性を割り当てるために関数内にいる必要はありません。あなたができる

def spam():
    #do stuff
    return
spam.eggs = "Foobar"

そして、spam.eggs と spam() はまったく同じように動作します。

于 2013-04-09T20:37:18.243 に答える
1

実際には静的フィールドを持つクラスが必要だと思います。変数は宣言されている関数に対してローカルであるため、必要な方法で変数にアクセスする方法はありません

class Spam:
     eggs="foobar"
     def __init__(self,*args,**kwargs):
         # do some stuff
         Spam.eggs = "foobared"

print Spam.eggs
Spam()
print Spam.eggs
于 2013-04-09T20:23:43.487 に答える