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

Python 如何在不终止程序的情况下禁止类的对象创建?,python,class,oop,python-3.x,object,Python,Class,Oop,Python 3.x,Object,所以我现在正在学习python,我想知道是否有一种方法可以让一个类成为其他类的超类,而不允许直接从它创建对象。我尝试删除构造函数方法,但这并没有停止实例化它只会使对象为空,我也尝试引发错误,但这会终止程序,这是我不想做的,从技术上讲,它不会阻止实例化它只是通过终止程序使对象不可访问。i、 e: class MySuperClass(): def __init__(self): raise Exception("Cannot create object directly f

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

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
中,但似乎没有任何效果。有什么想法吗?提前感谢。

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

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

任何创建
MySuperClass
实例的尝试都会导致
None
。但是,子类是可以设置的。

您到底想做什么?一个docstring“在实例化这个类之前考虑三次”怎么样?毕竟是Python。如果您试图要求子类实现一个方法,请使用
abc
模块您希望它做什么而不是停止程序?如果有人执行了
x=MySuperClass()
,然后试图使用
x
执行某些操作(比如调用其他方法),您希望发生什么?与其创建它,不如打印他们不应该做的,然后继续运行剩下的部分program@MarwanSabry:但是你不能那样做。如果“程序的其余部分”依赖于现有的
x
,则无法运行程序的其余部分。一般来说,你不能在不完成之前的操作的情况下直接跳到后面的操作,因为当人们创建一个对象时,他们希望能够使用它,所以当后来发现他们不能使用时,程序就会失败。