如何在Python中禁用类​​实例化?

时间:2014-10-16 10:35:24

标签: class python-3.x

有时我会创建一个类,它只用于存储一些值或静态方法,而我从不想要创建一个实例。

有没有办法在Python3中表达这个?

例如:

class MyClass:
    @staticmethod
    def hello():
        print("world")

    # is there a better way to do this?
    def __init__(self):
        raise Exception("instantiation isnt supported for this class!")

# OK
MyClass.hello()

# NOT OK
c = MyClass()

1 个答案:

答案 0 :(得分:2)

您可以使用找到的objectless基类in this answer(这实际上是对不同问题的回答)。

class objectless:
    def __new__(cls, *args, **kwargs):
        raise RuntimeError('%s should not be instantiated' % cls)

class UninstantiateableClass(objectless):
    @classmethod
    def foo(cls):
        return 'bar'
    ...

请注意,在python2中,objectless应该显式地为object创建子类,以便成为新式的类。