我有一个 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
。
我不想实例化这个类的对象,在我看来,拥有一个对象没有任何好处。 我尝试了不同的实现,使用类变量,但是如果导入类,每个变量都会被初始化,这不是我想要的。
也许有人为我提供了解决方案。
非常感谢!
答案 0 :(得分:3)
这可能不应该是一个类。但如果你真的想要这个,只需创建一个自定义描述符:
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'