可以在python类中创建def,即使def不存在,也可以调用def名称

2024-06-09 14:37:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想这样做:

class MyClass(Object):
    def ****(self):
        print self.__name __

MyClass.test()
->test

MyClass.whatever()
->whatever

因此,您可以调用任何方法并打印名称


Tags: 方法nametestself名称objectdefmyclass
1条回答
网友
1楼 · 发布于 2024-06-09 14:37:54

在类上实现^{} 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):

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'

相关问题 更多 >