静态类在Python(Static classes in Python)

2019-06-24 02:19发布

我曾经看到(我想从微软的网页),它是使用静态类的好办法,当你不需要类的两个或多个实例。

我用Python写的程序。 它是一个糟糕的风格,如果我用@classmethod一类的每一个方法是什么?

Answer 1:

在我的经验,创建一个类是有很多原因一个很好的解决方案。 一个是你拉闸使用类作为一个“正常”类(尤其是做不仅仅是一个实例更多)往往比你想象的。 这也是一个合理的款式选择坚持使用类寄托都; 这可以使它更容易为他人谁读/维护你的代码,如果ESP他们都非常OO - 他们会舒服类。 正如其他答复指出,这也是合理的,只要用“裸装”功能的实现。 你不妨先从一类,并使其成为单/博格模式(大量的例子,如果你googlefor这些); 它给你的灵活性,(重新)使用类,以满足其他需求。 我会建议不要作为非传统和非Python化,这使得它难以阅读和维护“静态类”的做法。



Answer 2:

一般情况下,像这样的使用情况只使用一个模块中的功能比较好做,无一类的。



Answer 3:

这是可怕的风格,除非你确实需要访问这个类。

静态方法[...]并没有转化为Python类方法。 哦,当然,它导致或多或少的效果相同,但类方法的目的实际上是做一些通常不是甚至有可能[...](如继承一个非默认的构造函数)。 一个[...]静态方法的惯用翻译通常为一个模块级功能,而不是一个类方法或静态方法。

资源



Answer 4:

有可能会采取这几个方法。 正如其他人所说,你可以只使用模块级的功能。 在这种情况下,模块本身是保存在一起的命名空间。 另一种选择,如果你需要保持状态的跟踪哪些是有用的,是定义与常规方法(以个体经营)一类,然后定义它的一个单一的全球实例,它的实例方法复制到模块的名称空间。 这是标准库“随机”模块所采用的方法-看看lib/python2.5/random.py在你的Python目录。 在底部,它是这样的:

# Create one instance, seeded from current time, and export its methods
# as module-level functions.  [...]
_inst = Random()
seed = _inst.seed
random = _inst.random
uniform = _inst.uniform
...

或者你可以把你所描述的基本方法(虽然我会建议使用@staticmethod而不是@classmethod在大多数情况下)。



Answer 5:

你可能真的想要一个单独的类,而不是一个静态类: Python来创建一个单例类



文章来源: Static classes in Python