32255


＜状況＞  
Python (Cython)を使って、以下のようなコードを書いています (かなり簡略化しています)。

[code]

    cdef class Branch:
       def __cinit__(self):
          self.param = npr.beta(1.0, gamma)
    
    def make_branch():
       for i in range(length):
          new_branch = Branch()
    
    def main(int length, double gamma):
       make_branch(length)
    
[/code]

Cythonでの関数`main(length,
gamma)`には、通常のPythonのファイルから作るべきBranchの数とそのパラメータ`gamma`を渡しており、Branchを作るたびにBeta(1.0,
gamma)からparameterを作ります。

＜質問＞  
Branchクラスから、直接的に`main()`にある`gamma`を参照することはできますでしょうか。以下のように、順々に`gamma`を渡していけば問題ないことはわかるのですが、実際は構造が複雑で、いちいち変数を渡して行くのが面倒なので、別の方法があればと思い質問させて頂きました。  
よろしくお願い致します。

[code]

    cdef class Branch:
       def __cinit__(self, gamma):
          self.param = npr.beta(1.0, gamma)
    
    def make_branch():
       for i in range(length):
          new_branch = Branch(gamma)
    
    def main(int length, double gamma):
       make_branch(length, gamma)
    
[/code]


CC BY-SA 3.0
2017-01-30T08:48:58.603
32251
2017-03-03T13:04:42.977
2017-03-03T13:04:42.977
19110
12704
question
python
PythonのClass内部から外部の変数を参照する


Branchとmainは別モジュールということでよいでしょうか。同モジュールならグローバル変数(関数のスコープ外で変数定義)すれば良いと思います。

別モジュールならば、以下のような感じでしょうか

config.py

[code]

    gamma=0//初期値
    
[/code]

main.py

[code]

    import config    
    config.gamma = gamma
    
[/code]

Branch.py

[code]

    import config
    #import main 必要なら
    print(config.gamma)
    
[/code]

参考：  
<https://docs.python.org/2.7/faq/programming.html#how-do-i-share-global-
variables-across-modules>


CC BY-SA 3.0
2017-01-30T09:13:19.340
32255
2017-01-30T09:46:04.043
2017-01-30T09:46:04.043
19716
19716
32251
answer