如何在不终止程序的情况下禁止对象创建对象?

时间:2015-12-26 20:32:10

标签: python class oop python-3.x object

所以我正在学习python,我想知道是否有办法让一个类成为其他类的超类而不允许直接从它创建对象。我尝试删除构造函数方法,但这并没有停止实例化它只使对象空白,我也尝试引发错误,但终止程序,我不想做,从技术上讲,它不会阻止实例化它只是通过终止程序使对象无法访问。即:

class MySuperClass():
    def __init__(self):
        raise Exception("Cannot create object directly from base class")

我也试过尝试然后在其中引发异常

try:
    class MySuperClass():
        def __init__(self):
            raise ValueError
except:
    print("Cannot create object directly from base class")

仍然不会停止创建对象,我也尝试将此行放在构造函数del self中,但它似乎没有任何效果。有任何想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

Python类有一个__new__方法,在创建实例并返回实例时会调用该方法。因此,以下代码将起作用。

class MySuperClass(object):
    def __new__(cls,*args):
        if cls is MySuperClass:
            return None
        return object.__new__(cls,*args)

任何创建MySuperClass实例的尝试都会为您提供None。但是,子类可以实例化。