gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 17:36:33 30 4
gpt4 key购买 nike

我想做这样的事情:

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

MyClass.test()
->test

MyClass.whatever()
->whatever

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

最佳答案

实现 __getattr__() method在您的类上拦截对未知属性的访问尝试,并返回一个函数(您可以将其绑定(bind)到该类):

class MyClass(object):
def __getattr__(self, name):
def echo():
return name
return echo

这将返回未绑定(bind)的函数,不引用实例。

你需要先创建一个实例才能工作:

>>> class MyClass(object):
... def __getattr__(self, name):
... def echo():
... return name
... return echo
...
>>> instance = MyClass()
>>> instance.test()
'test'
>>> instance.whatever()
'whatever'

您可以通过手动调用 descriptor protocol 将函数绑定(bind)到实例(因此它得到 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'

关于python - 可以在 python 类中创建一个 def,即使 def 不存在也可以调用 def 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29868190/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com