Python 如何直接调用类方法的引用?
有的时候,需要把 class 的 method 传到其他地方去,然后再调用,但是这样,self 不会被自动填充。
比如下面这样的代码:
from typing import Callablefrom loguru import logger
class Work:
def run(self, data: str):
logger.debug(data)
method = Work.run
method('哈哈')
报错了:
─➤ python -u "/home/bot/Desktop/ideaboom/011.py"Traceback (most recent call last):
File "/home/bot/Desktop/ideaboom/011.py", line 17, in <module>
method('哈哈')
TypeError: Work.run() missing 1 required positional argument: 'data'
然后我改成了下面这样:
from typing import Callablefrom loguru import logger
class Work:
def run(self, data: str):
logger.debug(data)
method = Work.run
# method('哈哈')
instance = Work()
method(instance, '哈哈')
跑通了:
─➤ python -u "/home/bot/Desktop/ideaboom/011.py" 2022-08-02 22:41:15.461 | DEBUG | __main__:run:7 - 哈哈
可以跑通了,但是感觉这样是不对的,因为 run 的 self 表示的是实例,我实例化了之后,再填充到 run 中,感觉怪怪的。
正确的做法应该是什么呢?
回答:
run的self表示的是实例化的对象,而不是该class本身,如果你不希望在使用某类的函数时将其实例化,可以将self参数去除,之后即使是method("哈哈"
还是Work.run("哈哈")
都可以运行
还有一个挺经典的例子
class x: def __init__(self):
self.run = run
def run(self, ctx):
print(ctx)
Test=x()
Test.run("Hello")
这段代码将外部函数作为一个类的方法,但是最后运行中会提示缺少参数
你会发现外部函数run中的self参数无法通过实例化x使用Test.run来赋予该参数实例化对象
此时外置函数run在Test.run中的体现是作为类的一个变量,所以会缺少参数。
以上是 Python 如何直接调用类方法的引用? 的全部内容, 来源链接: utcz.com/p/938575.html