ryn*_*ynd 25 python static class instance class-method
我曾经读过(我认为在微软的一个页面上)当你不需要两个或更多类的实例时,这是一个使用静态类的好方法.
我正在用Python编写程序.如果我@classmethod用于课堂的每一种方法,这是一种糟糕的风格吗?
Gar*_*tty 33
通常,这样的使用最好只使用模块中的函数,而根本不使用类.
根据我的经验,创建课程是一个非常好的解决方案,原因有很多.一个是你最后使用这个类作为一个"普通"类(特别是只做一个实例)比你想象的更频繁.坚持使用课程也是一种合理的风格选择; 这可以使阅读/维护代码的其他人更容易,尤其是如果他们非常OO - 他们会对课程感到满意.如其他回复中所述,仅使用"裸"功能进行实施也是合理的.您可能希望从一个类开始,并使其成为单例/ Borg模式(如果您对这些模式进行了大量示例); 它使您可以灵活地(重新)使用该类来满足其他需求.我建议不要使用'静态类'方法作为非传统和非Pythonic,这使得它更难以阅读和维护.
您可以采取一些方法.正如其他人所提到的,你可以使用模块级函数.在这种情况下,模块本身就是将它们组合在一起的命名空间.另一个选项,如果需要跟踪状态,可能很有用,是使用普通方法定义一个类(使用self),然后定义它的单个全局实例,并将其实例方法复制到模块命名空间.这是标准库"随机"模块采用的方法 - 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
...
Run Code Online (Sandbox Code Playgroud)
或者您可以采用您描述的基本方法(尽管我建议使用@staticmethod而不是@classmethod在大多数情况下使用).