【发布时间】:2019-02-05 08:46:10
【问题描述】:
我想创建一个只包含静态成员的 utils-class,例如
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__ 提出异常
最佳做法是什么(第三种选择?)
【问题讨论】:
-
如果您的类不打算实例化(或子类化),请不要使用类。你的类应该只是一个模块。
-
为什么要这样做?答案取决于原因。为了安全:算了。但如果这只是对程序员的提示,事情可以做得更简单。请记住,人们仍然可以将您的类包含在一个新类中(如此组合),这可以轻松模拟继承,
-
@Aran-Fey 我希望它具有私有方法和公共方法。我也应该在模块中这样做吗?
-
@CIsForCookies 是的。
标签: python python-2.7 abstract-class static-methods