Python 禁用类实例化的最佳实践
我想创建一个只包含静态成员的utils类,例如Python 禁用类实例化的最佳实践,python,python-2.7,abstract-class,static-methods,Python,Python 2.7,Abstract Class,Static Methods,我想创建一个只包含静态成员的utils类,例如 class A(object): X = 0 @staticmethod def f(): print X 我还希望所有it方法都在没有实例的情况下使用,也就是说,我希望用户调用A.f(),而不是A=A();a、 f() 一种方法是使用@abc.abstractmethod,例如 class A(object): X = 0 @abc.abstractmethod def __init__(self): r
class A(object):
X = 0
@staticmethod
def f():
print X
我还希望所有it方法都在没有实例的情况下使用,也就是说,我希望用户调用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
第二种选择是不使用抽象,因为它意味着继承,这不是我在这个类中设计的东西。在这种情况下,我只需要从\uuuuu init\uuuu
和\uuu new\uuuu
引发异常
最佳实践是什么(第三种选择?python方法是将所有这些静态函数放在一个模块中。这些函数之间没有共享状态,为什么必须使用类?鉴于您询问的是什么是“最佳实践”,而不是技术上如何做到这一点,我可以回答您,最佳实践是不这样做;)我以前从未见过这样的构造,我相信它违反了两条Python“原则”:
- 我们在这里都是成年人
- 最小惊奇原则
from:如果您的类不需要实例化(或子类化),请不要使用类。你的课程应该只是一个模块,你为什么要这么做?答案取决于原因。为了安全:算了吧。但若这只是对程序员的一个提示,那个么事情可以做得更简单。请记住,人们仍然可以将您的类包含在一个新类中(因此组合),该类可以很容易地模拟继承,@aranfey我希望它具有私有方法和公共方法。我也应该在模块中这样做吗?@CIsForCookies是的。