Python 如何在不终止程序的情况下禁止类的对象创建?
所以我现在正在学习python,我想知道是否有一种方法可以让一个类成为其他类的超类,而不允许直接从它创建对象。我尝试删除构造函数方法,但这并没有停止实例化它只会使对象为空,我也尝试引发错误,但这会终止程序,这是我不想做的,从技术上讲,它不会阻止实例化它只是通过终止程序使对象不可访问。i、 e: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
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
,则无法运行程序的其余部分。一般来说,你不能在不完成之前的操作的情况下直接跳到后面的操作,因为当人们创建一个对象时,他们希望能够使用它,所以当后来发现他们不能使用时,程序就会失败。