首先要记住的是,方法是碰巧是callable的属性。>>> s = " hello "
>>> s.strip()
'hello'
>>> s.strip
所以您可以像处理不存在的属性一样处理不存在的方法。
这通常通过定义^{} method来完成。
现在你将看到函数和方法之间的区别,这是额外的复杂性。方法需要绑定到对象。你可以take a look at this question来讨论这个问题。
所以我想你会想要这样的东西:import types
class SomeClass(object):
def __init__(self,label):
self.label = label
def __str__(self):
return self.label
def __getattr__(self, name):
# If name begins with f create a method
if name.startswith('f'):
def myfunc(self):
return "method " + name + " on SomeClass instance " + str(self)
meth = types.MethodType(myfunc, self, SomeClass)
return meth
else:
raise AttributeError()
它给出:>>> s = SomeClass("mytest")
>>> s.f2()
'method f2 on SomeClass instance mytest'
>>> s.f2
>
但是,我可能会建议不要使用这个。如果你告诉我们你想解决的问题,我希望这里有人能想出更好的解决办法。