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

标签 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()

最佳答案

您可以使用发现的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,以便成为新式类。

关于class - 如何在Python中禁用类​​实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26402233/

相关文章:

javascript - 如何引用已作为键传递到 Map 的类实例 JavaScript

java - 对象的动态命名

java - 根据类名测试类是否包含实例变量

Python - 以 YYYY-MM-DD 格式获取昨天的日期作为字符串

python - 我如何通过 Python 中的多个函数 "double return"?

python - 如何在 python 中合并两个具有相同索引的系列?

python-3.x - 当我尝试重新创建来自 Hands On Machine Learning with Sci-Kit Learn & Tensorflow 的住房数据集时,该数据集不显示

javascript - 在动态宽度侧边栏中将元素保持在同一行

python-3.x - 为什么 GCP Pub/Sub 订阅无法确认消息?

Python 类继承 : dict how to pickle(save, 加载)