首页 > 解决方案 > 禁用类实例化的最佳实践

问题描述

我想创建一个仅包含静态成员的 utils 类,例如

class A(object):
  X = 0
  @staticmethod
  def f():
    print X

我还希望在没有实例的情况下使用所有方法,即我希望用户调用A.f()而不是a = A(); a.f().

一种方法是使用@abc.abstractmethod,例如

class A(object):
  X = 0
  @abc.abstractmethod
  def __init__(self):
    raise Exception('Should not be created!')
  @staticmethod
  def f():
    print X

第二种选择是不使用抽象,因为它意味着继承,这不是我为这个类设计的东西。在这种情况下,我只会从两者中引发__init__异常__new__

最佳实践是什么(第三种选择?)

标签: pythonpython-2.7abstract-classstatic-methods

解决方案


pythonic的方法是将所有这些静态函数放在一个模块中。这些函数之间没有共享状态,为什么必须使用类?


推荐阅读