我在我的一个项目中遇到了一个问题,我设法将其简化为一个尽可能简单的例子.请考虑以下几点

class A:
    def f(self):
        return 'I am f()'

class B(A):
    def g(self):
        return 'I am g()'

a = A()
b = B()

print(a.f.__qualname__)
print(b.f.__qualname__)
print(b.g.__qualname__)

我得到的输出是

A.f
A.f
B.g

我期待的结果是

A.f
B.f
B.g

因为我关心的不仅是函数名,还有类名,不是真正在其中定义函数的类,而是被实例化的类.有谁知道怎么弄到它吗?

推荐答案

我认为你可以try 一下这样的方法:

def dynamic_qualname(method):
    return method.__self__.__class__.__name__ + '.' + method.__name__

print(dynamic_qualname(a.f))
print(dynamic_qualname(b.f))
print(dynamic_qualname(b.g))

# Output
A.f
B.f
B.g

Python相关问答推荐

@Property方法上的inspect.getmembers出现意外行为,引发异常

点到面的Y距离

Django mysql图标不适用于小 case

用合并列替换现有列并重命名

运输问题分支定界法&

如何让这个星型模式在Python中只使用一个for循环?

不允许访问非IPM文件夹

为什么Django管理页面和我的页面的其他CSS文件和图片都找不到?'

如何在FastAPI中为我上传的json文件提供索引ID?

剪切间隔以添加特定日期

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame

具有相同图例 colored颜色 和标签的堆叠子图

不允许 Select 北极滚动?

如何在信号的FFT中获得正确的频率幅值

如何在Python中从html页面中提取html链接?

对数据帧进行分组,并按组间等概率抽样n行

将数据从一个单元格保存到Jupyter笔记本中的下一个单元格

关于数字S种子序列内部工作原理的困惑

Pandas ,快速从词典栏中提取信息到新栏