我的结构如下:
def __init__(self, my_param):
if my_param:
self.my_param = my_param
else:
raise MYException()
我在value=self.my_param
但是当我没有通过my_param
时,它不会引发异常,但会说class object does not have my_param
如何正确抚养?
答案 0 :(得分:1)
实际上当你没有向你的函数传递一个参数时,引发TypeError
异常就是python本身所做的事情,我认为没有必要覆盖这个异常:):
TypeError: __init__() takes exactly 2 arguments (1 given)
但是你也可以使用*args
将一个参数元组传递给你的构造函数,以便检查args
的有效性,如果你没有传递任何东西,它将传递一个空元组:
class a(object):
def __init__(self, *args):
if args:
self.param = args[0]
else:
raise Exception("Please pass a parameter to instance")
另外,作为一种实用而非pythonic方法,您可以使用装饰器来包装构造函数:
def my_exp(func):
def wrapper(*args, **kwds):
if args:
return func(*args)
else:
raise Exception("Pleas pass an argument to instance")
return wrapper()
class a(object):
@my_exp
def __init__(self, my_param):
self.param = my_param
演示:
instance = a()
Traceback (most recent call last):
File "/home/kasra/Desktop/ex2.py", line 11, in <module>
class a(object):
File "/home/kasra/Desktop/ex2.py", line 12, in a
@my_exp
File "/home/kasra/Desktop/ex2.py", line 9, in my_exp
return wrapper()
File "/home/kasra/Desktop/ex2.py", line 8, in wrapper
raise Exception("Pleas pass an argument to instance")
Exception: Pleas pass an argument to instance
您还可以使用其他工具,例如functools.wraps
等,以便创建更灵活的装饰器。但我仍然建议让python为你完成这项工作!
答案 1 :(得分:0)
这应该有效,
def __init__(self, my_param=None):
if my_param:
self.my_param = my_param
else:
raise MYException()