python - 如何从 Python 中的方法中获取类?
问题描述
当我们将给定方法作为参数传递时,我正在尝试编写一个获取类的函数。
例如,如果我们有
class Hello:
NAME = "HELLO TOTO"
def method(self) -> int:
return 5
@classmethod
def cls_method(cls) -> str:
return "Hi"
class Bonjour(Hello):
NOM = "BONJOUR TOTO"
def new_method(self) -> int:
return 0
我会得到:
Hello
从方法Hello().method
或Hello().cls_method
Bonjour
从方法Bonjour().new_method
或Bonjour().cls_method
我在 SO 上进行了搜索,但找不到对我的问题的任何直接答案。
我怎么能实现这样的功能(如果重要的话,在 Python 3.6+ 中)?
谢谢
解决方案
我相信没有万无一失的方法,但这适用于大多数情况:
def get_class_of_bound_self(f):
assert hasattr(f, '__self__')
return f.__self__ if isinstance(f.__self__, type) else type(f.__self__)
f
请注意,如果是元类的方法,这将崩溃M
;它会返回M
而不是type
.
推荐阅读
- java - 将活动上下文传递给类文件
- json - RawRabbit - 如何发布/订阅 JSON 消息
- php - 如何将类添加到functions.php中的链接?
- f# - 如何模仿 F# 编译器类型检查?
- java - Java getPart() 抛出 NullPointerException
- timestamp - 什么时间戳格式是 48 位/6 字节长?
- c - 如何更改 pthread_cont_wait 中的互斥锁
- excel - 如何在 Excel vba 中根据周数生成累积库存图
- r - 整个应用程序的闪亮覆盖滚动条中的 div
- ruby-on-rails - Rails 6:每个用户只能创建一个配置文件