我希望做这样的事情:
class MyClass(Object):
def ****(self):
print self.__name __
MyClass.test()
->test
MyClass.whatever()
->whatever
所以你可以调用任何方法并输出名称。
答案 0 :(得分:2)
在您的类上实现__getattr__()
method以拦截对未知属性的访问尝试,并返回一个函数(您可以绑定到该类):
class MyClass(object):
def __getattr__(self, name):
def echo():
return name
return echo
这将返回未绑定的函数,而不引用该实例。
您需要先创建一个实例才能使其正常工作:
>>> class MyClass(object):
... def __getattr__(self, name):
... def echo():
... return name
... return echo
...
>>> instance = MyClass()
>>> instance.test()
'test'
>>> instance.whatever()
'whatever'
您可以通过手动调用descriptor protocol将函数绑定到实例(因此传入self
),在返回函数之前调用__get__
:
class MyClass(object):
def __getattr__(self, name):
def echo(self):
return '{}.{}'.format(type(self).__name__, name)
return echo.__get__(self, type(self))
访问self
我们可以打印更多信息:
>>> class MyClass(object):
... def __getattr__(self, name):
... def echo(self):
... return '{}.{}'.format(type(self).__name__, name)
... return echo.__get__(self, type(self))
...
>>> instance = MyClass()
>>> instance.test()
'MyClass.test'
>>> instance.whatever()
'MyClass.whatever'