python变量方法名
如何从与被调用方法在同一类中的另一个方法中指定名称来执行方法?像这样:python变量方法名,python,function,variables,methods,Python,Function,Variables,Methods,如何从与被调用方法在同一类中的另一个方法中指定名称来执行方法?像这样: class Class1: def __init__(self): pass def func1(self, arg1): # some code def func2(self): function = getattr(sys.modules[__name__], "func1") # apparently this does not work 有什么
class Class1:
def __init__(self):
pass
def func1(self, arg1):
# some code
def func2(self):
function = getattr(sys.modules[__name__], "func1") # apparently this does not work
有什么建议吗?如何getattr(self,“func1”)
?另外,避免使用name函数
例如:
>>> class C:
... def f1(self, arg1): print arg1
... def f2(self): return getattr(self, "f1")
...
>>> x=C()
>>> x.f2()(1)
1
您应该从类而不是模块中获取属性
def func2(self):
method = getattr(self, "func1")
method("arg")
但是你也应该检查它是否可以调用
if callable(method):
method("arg")
这将避免调用您不希望得到的东西。如果不可调用,您可能需要在此处引发自己的异常。如果您知道所需的方法,则没有理由使用
getattr
,只要抓住它即可。getattr
如果您知道该方法的名称,则不必使用。还有,为什么要检查它是否可调用?要么它是(如果它是一个方法,那么应该是),要么它将引发一个异常——这是处理错误的正确方法。@Ethan推测该名称实际上是一个变量,这只是一个示例。可调用检查在一行代码中避免了错误,而且意图更明确,因为getattr可以返回任何类型的属性,而不仅仅是方法。。。好的,我可以看到名称在变量中(最初的问题措辞不好),尽管我仍然不同意可调用检查:如果它不可调用,你会怎么做?提出一个例外?除非你有充分的理由,否则就让试图调用不可调用对象的异常perculate up吧。@Ethan这些都是好问题,但超出了OP问题的范围。OP必须考虑其他设计标准来决定这些事项。但总的来说,我认为错误检查或避免错误是一件好事。
if callable(method):
method("arg")