我想设置一个类,它将在实例创建期间根据传递给类的参数的值中止.我尝试过一些东西,其中一个是在__new__
方法中引发错误:
class a():
def __new__(cls, x):
if x == True:
return cls
else:
raise ValueError
Run Code Online (Sandbox Code Playgroud)
这就是我希望会发生的事情:
>>obj1 = a(True)
>>obj2 = a(False)
ValueError Traceback (most recent call last)
Run Code Online (Sandbox Code Playgroud)
obj1
存在但obj2
不存在.
有任何想法吗?
aar*_*ing 19
当你覆盖时__new__
,别忘了打电话给超级!
>>> class Test(object):
... def __new__(cls, x):
... if x:
... return super(Test, cls).__new__(cls)
... else:
... raise ValueError
...
>>> obj1 = Test(True)
>>> obj2 = Test(False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 6, in __new__
ValueError
>>> obj1
<__main__.Test object at 0xb7738b2c>
>>> obj2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'obj2' is not defined
Run Code Online (Sandbox Code Playgroud)
当你的工作是创建实例时,简单地返回类没有任何作用.这就是超类的__new__
方法所做的,所以要充分利用它.
只需在初始化程序中引发异常:
class a(object):
def __init__(self, x):
if not x:
raise Exception()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11924 次 |
最近记录: |