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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值