私が持っているclass
環境変数から文字列を返しますPythonの静的メソッドの束を保持するために使用されています。
class GitLabCiEnv():
"""
Gitlab CI Environment variables.
"""
@staticmethod
def CHAT_CHANNEL() -> str:
"""
Source chat channel which triggered the ChatOps command.
Added in GitLab 10.6
Available in GitLab Runner all
"""
return os.environ["CHAT_CHANNEL"]
@staticmethod
def CHAT_INPUT() -> str:
"""
Additional arguments passed in the ChatOps command.
Added in GitLab 10.6
Available in GitLab Runner all
"""
return os.environ["CHAT_INPUT"]
これで、環境変数の値を取得するためにclass
呼び出すことができGitLabCiEnv.CHAT_CHANNEL()
ます。「醜い」とは、それぞれにパランセシスを使わなければならないということ@staticmethod
です。私がすることはGitLabCiEnv.CHAT_CHANNEL
、paranthesisなしです。
私はこのクラスのオブジェクトをインスタンス化したくありません。私の意見では、オブジェクトを持つことの利点はありません。クラス変数を使用してさまざまな実装を試しましたが、クラスがインポートされると各変数が初期化されます。これは私が望むものではありません。
多分誰かが私のための解決策を持っています。
どうもありがとうございました!
これはおそらくクラスであってはなりません。ただし、これが本当に必要な場合は、カスタム記述子を作成するだけです。
import os
class EnvProxy:
def __init__(self, key):
self.key = key
def __get__(self, obj, objtype=None):
return os.environ[self.key]
class GitLabCiEnv:
CHAT_CHANNEL = EnvProxy("CHAT_CHANNEL")
CHAT_INPUT = EnvProxy("CHAT_INPUT")
例:
(py38) juanarrivillaga@50-254-139-253-static Project-Roche-2 % CHAT_INPUT=foo python -i test.py
>>> GitLabCiEnv.CHAT_INPUT
'foo'
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加