python变量方法名
Posted
技术标签:
【中文标题】python变量方法名【英文标题】:python variable method name 【发布时间】:2011-10-31 01:54:21 【问题描述】:如何通过给出方法名来执行与被调用方法在同一个类中的另一个方法?像这样:
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
有什么建议吗?
【问题讨论】:
【参考方案1】: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
【讨论】:
如果你知道你想要的方法,就没有理由使用getattr
——抓住它。【参考方案2】:
你应该从类而不是模块中获取属性。
def func2(self):
method = getattr(self, "func1")
method("arg")
但您还应该检查它是否可调用。
if callable(method):
method("arg")
这将避免调用你没想到的东西。如果它不可调用,您可能想在此处提出自己的异常。
【讨论】:
getattr
在您知道方法名称时是不必要的。另外,为什么要检查它是否可调用?要么是(如果它是一种方法,应该是),或者它会引发异常——这是处理错误的正确方法。
@Ethan 该名称可能实际上是一个变量,这只是一个示例。可调用检查在一行代码中避免了错误,并且意图更清晰,因为 getattr 可以返回任何类型的属性而不仅仅是方法。
嗯...好吧,我可以看到名称在变量中(原始问题措辞不好),尽管我仍然大多不同意可调用检查:如果它不可调用,该怎么办你做?引发异常?除非您有充分的理由,否则请让尝试调用不可调用对象的异常渗透起来。
@Ethan 这些都是好问题,但超出了 OP 问题的范围。 OP 必须在考虑其他设计标准的情况下决定这些事情。但总的来说,我认为错误检查或避免错误是一件好事。以上是关于python变量方法名的主要内容,如果未能解决你的问题,请参考以下文章