2016-05-05 6 views
1

コンテキストに(特定の型を持たない)関数を渡す正しい方法は何ですか? 複数のメソッドがあり、それぞれが署名にコンテキストを受け入れます。各関数は、どの変数をコンテキスト内で調べるべきかを知っています(以下の例では、f1は "a"を探す必要があることを認識しています)。コンテキストを定義してそのプロパティの1つに値を設定する方法を理解できません。Python:コンテキストに関数を渡す方法

私はこれをC言語のバックグラウンドで書いています。だから、Pythonの世界で少し厄介なように見えるかもしれません。このやり方をやり直す方法もあります。 Cでは、設定する可能性があるすべての変数に対してコンテキストを完全に定義する必要があります。 Pythonでは動的なので、私はコンテキスト変数の型を必要とすべきではないという印象を受けていますが、context.aをどのように設定することができるかを定義することはできません。私がやろうとしています何の

簡単な例を以下に示します。

def f1(context): 
    a = context.a 
    print "a: " + a 

def f2(context): 
    b = context.b 
    print "b: " + b 

context1.a = "testing1" 
f1(context1) 

context2.b = "testing2" 
f2(context2) 
+0

それはあなたが何をしようとして明らかではありません。 Pythonの変数は型付けされていないので、変数を初期化して関数に渡すことができます。 – yelsayed

答えて

2

あなたは「空」のクラスを定義し、動的にコード内でそのクラスのインスタンスに変数を追加することができます

#!python3 

class Context: 
    pass 

def f1(context): 
    a = context.a 
    print("a:", a) 

def f2(context): 
    b = context.b 
    print("b:", b) 

c = Context() 
c.a = 1 
c.b = "alfalfa" 

f1(c) 
f2(c) 
+0

それはスマートだった!私自身のContextクラスを定義する代わりに使用できるPythonにダミーのクラスがありますか? – apadana

+1

@apadana:いいえ。「オブジェクト」の直接インスタンスを変更することはできません。 –

1

Pythonは動的言語である、したがって、あなたが任意の引数として任意の型を渡すことができますし、それは内のコードまでです正しいことをする機能。

"Duck typing" on Wikipedia

+0

私のような初心者が理解できるように、例を少し説明できますか? –

関連する問題