当我尝试编写一小段代码以避免在Python 2.7中创建类的实例时,我遇到了一个小麻烦。问题是,当我没有扩展对象'并试图在'__new__'
方法中引发异常时,'__init__'
方法被调用(这意味着对象被创建好了)并且流程继续。但是,当我确实延伸“对象”时,事情似乎按预期工作,这提高了例外。
我想知道这可能是什么原因。
我在Stackoverflow中找不到答案,如果你们觉得这是重复的话,如果你能指出我正确的方向会更好。
from classcreator import AbstractionException
class test():
def __new__(self):
try:
raise AbstractionException("Can't instantiate class")
except AbstractionException:
print ('OOPS !!! ')
def __init__(self):
self.name='Hello'
def __str__(self):
return self.name
x=test()
print(x)
答案 0 :(得分:1)
此类行为的原因是使用旧式类。这些课程没有__new__()
静态方法。以下是Guido van Rossum的辉煌article,描述了新式和旧式课程之间的区别。