59344


Ｃ言語系では、ライブラリーに定数や関数を定義してファイル化し、別ファイルで  
importして使うということは普通でした。  
pythonで定数を定義して、importして使うということはできないでしょうか？

関数は別ファイルに定義してimportして使っております。


CC BY-SA 4.0
2019-08-22T12:37:00.710
57546
2019-09-30T00:53:11.577
34450
question
python
python で　定数をモジュール化してimportする方法を教えてください

[code]

    touch constant.py
    echo "PI=3.14" >> constant.py
    python
    >>> import constant
    >>> print(constant.PI)
    3.14
    
[/code]

  1. constant.pyという仮のモジュールファイルを作るとします。ファイル名は何でもいいですが、.pyをつけたほうがいいです。
  2. constant.pyの中に、グローバル変数として`PI=3.14`を書きます。
  3. pythonを起動し、constant.pyをインポートします。
  4. constant.pyから定数のPIを呼び出します。

実際には、pythonには定数がないため、通常は上記のような方法で定数を扱います。しかし、値の上書きを防ぐためにはそのための仕組みを作る必要があります。

[code]

    class _const(object):
        class ConstError(TypeError):
            pass
    
        def __setattr__(self, name, value):
            if name in self.__dict__:
                raise self.ConstError()
            self.__dict__[name] = value
    
    
    import sys
    sys.modules[__name__] = _const()
    
[/code]

このスクリプトをconst.pyという名で保存した場合、

[code]

    import const
    const.Foo = 100
    
[/code]

のように、const.Fooという名の定数を定義することができます。このFooは上書きすることができません。このconst.pyを使って定数を定義する場合、

[code]

    touch constant2.py
    echo "import const" >> constant2.py
    echo "const.PI = 3.14" >> constant2.py
    python
    >>> import constant2 as cst
    >>> cst.const.PI
    3.14
    
[/code]

のように呼び出せます。


CC BY-SA 4.0
2019-09-30T00:53:11.577
59344
2019-09-30T00:53:11.577
57546
answer