【发布时间】:2021-06-01 07:39:44
【问题描述】:
我有一个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,不带括号。
我不想实例化这个类的对象,在我看来,拥有一个对象没有任何好处。 我尝试了不同的实现,使用类变量,但是如果类被导入,每个变量都会被初始化,这不是我想要的。
也许有人可以为我提供解决方案。
非常感谢!
【问题讨论】:
-
使用类方法?
-
“在我看来,拥有一个对象没有任何好处”正确。事实上,拥有一个类也没有任何好处,因为似乎没有任何需要跟踪的状态。这些方法应该只是模块级函数
-
“我有一个类,用于保存一堆 python 静态方法”,那时不应该是一个类。可能只是一个有功能的模块
-
是的,我想到了“带函数的模块”,但是我不会去掉括号。因为返回值或多或少是我想要的“静态/常量”,所以最终用户(使用此类)具有尽可能简单的接口。也许如果有人能给我一个如何以其他方式实现它的例子,我会检查它。
标签: python python-3.x oop