2024-06-09 14:37:54 发布
网友
我想这样做:
class MyClass(Object): def ****(self): print self.__name __ MyClass.test() ->test MyClass.whatever() ->whatever
因此,您可以调用任何方法并打印名称
在类上实现^{} 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,在返回之前调用函数上的__get__,可以将函数绑定到实例(这样它就可以获得传入的self):
__get__
self
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'
在类上实现^{} method ,以拦截对未知属性的访问尝试,并返回一个函数(可以绑定到类):
它返回未绑定的函数,不引用实例
您确实需要先创建一个实例,这样才能工作:
通过手动调用descriptor protocol,在返回之前调用函数上的
__get__
,可以将函数绑定到实例(这样它就可以获得传入的self
):通过访问
self
,我们可以打印更多的信息:相关问题 更多 >
编程相关推荐