python类直接调用不实例化_防止类在Python中直接实例化

我可以这样做:class SuperClass(object):

def __init__(self):

if type(self) == SuperClass:

raise Exception(" must be subclassed.")

# assert(type(self) == SuperClass)

class SubClass(SuperClass):

def __init__(self):

SuperClass.__init__(self)

subC = SubClassOne()

supC = SuperClass() # This line should throw an exception

运行时(引发异常!)以下内容:[ 18:32 jon@hozbox ~/so/python ]$ ./preventing-direct-instantiation.py

Traceback (most recent call last):

File "./preventing-direct-instantiation.py", line 15, in

supC = SuperClass()

File "./preventing-direct-instantiation.py", line 7, in __init__

raise Exception(" must be subclassed.")

Exception: must be subclassed.

编辑(来自评论):[ 20:13 jon@hozbox ~/SO/python ]$ cat preventing-direct-instantiation.py

#!/usr/bin/python

class SuperClass(object):

def __init__(self):

if type(self) == SuperClass:

raise Exception(" must be subclassed.")

class SubClassOne(SuperClass):

def __init__(self):

SuperClass.__init__(self)

class SubSubClass(SubClassOne):

def __init__(self):

SubClassOne.__init__(self)

class SubClassTwo(SubClassOne, SuperClass):

def __init__(self):

SubClassOne.__init__(self)

SuperClass.__init__(self)

subC = SubClassOne()

try:

supC = SuperClass()

except Exception, e:

print "FAILED: supC = SuperClass() - %s" % e

else:

print "SUCCESS: supC = SuperClass()"

try:

subSubC = SubSubClass()

except Exception, e:

print "FAILED: subSubC = SubSubClass() - %s" % e

else:

print "SUCCESS: subSubC = SubSubClass()"

try:

subC2 = SubClassTwo()

except Exception, e:

print "FAILED: subC2 = SubClassTwo() - %s" % e

else:

print "SUCCESS: subC2 = SubClassTwo()"

印刷品:[ 20:12 jon@hozbox ~/SO/python ]$ ./preventing-direct-instantiation.py

FAILED: supC = SuperClass() - must be subclassed.

SUCCESS: subSubC = SubSubClass()

SUCCESS: subC2 = SubClassTwo()


版权声明:本文为weixin_30097621原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。