嗨,我只是在想如何设计它,所以我有一个成员函数,该函数依赖于成员函数是否已初始化。我目前正在做的事情如下
class Foo:
def __init__(self, param = None):
if param :
self.has_param = True
self.param = some_value
else:
self.has_param = False
def bar(self): % function that uses param
if not self.has_param:
raise Exception('param not set')
def bar2(self): % function that doesn't use param
pass
我搜索并搜索了SO,但似乎什么也没有敲响。这足够Pythonic吗?还是有其他方法可以直接检查self.param是否存在? 谢谢。
编辑:评论中的一些新想法
class Foo:
def __init__(self, param = None):
self.param = param
def bar(self):
if not hasattr(self, param):
raise Exception('param not set')
或者我可以做到这一点,
class Foo:
def __init__(self, param = None):
self.param = param
def bar(self):
if not self.param:
raise Exception('param not set')
答案 0 :(得分:1)
您还可以使用tryexcept和正常失败
答案 1 :(得分:1)
也许您可以尝试以下方法:
class Foo:
def __init__(self, param = None):
self.param = param
def __getattribute__(self, key):
value = super().__getattribute__(key)
if value is None:
raise AttributeError(f'Attribute "{key}" not set')
return value
def bar(self):
myparam = self.param
Foo(param='Hello world').bar() # OK
Foo().bar() # Error: Attribute "param" not set