- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 python 检查模块检查源代码。我在本例中检查的代码示例是:
class xxx:
def __init__(self):
pass
def xxxmethod(self):
pass
我希望当我检查这段代码并检查“xxxmethod”的类型时,它会是 types.MethodType。正如建议的那样here ,我用它来接收函数元素:
found_function = getattr(class_element, method_name, None)
但是它的类型是 types.FunctionType 而不是 types.MethodType。
当我使用 getmembers() 打印 class_element 的内容时,
('xxxmethod', <function xxxmethod at 0x00000000028EC6C8>)
这是字典中的元素。
它到底为什么会这样?我是不是忽略了什么?
编辑:class_element 是从范围字典接收的。这与这不是该类的实例有关吗?
谢谢!
最佳答案
Python 2 和 3 在这方面有所不同。
在 Python 2 中你会得到:
<type 'instancemethod'>
但是如果你打印该方法会给出:
<unbound method A.m>
在 Python 3 中,您将得到:
<class 'function'>
最终是因为您正在查找类上的方法。
在 Python 2 中,通过类访问方法会返回所谓的未绑定(bind)方法。 Python 3 中取消了未绑定(bind)方法的概念。
现在,如果您实际上创建了该类的实例,那么在 Python 2 中您将再次得到:
<type 'instancemethod'>
如果你打印出来会给出:
<bound method A.m of <__main__.A instance at 0x10ae7ad40>>
在 Python 3 中:
<class 'method'>
这相当于 Python 2 中的实例方法,并且类似地打印为:
<bound method A.m of <__main__.A object at 0x10063c6d8>>
所以是的,这是因为您没有在类的实例上查找方法。 Python 3 不再具有未绑定(bind)方法的概念这一事实进一步令人困惑。
关于Python 检查将方法识别为 FunctionType 而不是 types.MethodType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25400035/
我有这样的代码: class A(): def __init__(self, a): self.a = a def outer_method(self):
我想在不将 type(testObject) 更改为 FunctionType 的情况下实现以下功能: import functools class TestClass(object): de
我正在努力加强我的 Python 技能,我遇到了 Open-Source code for Saltstack那是使用types.FunctionType,我不明白发生了什么。 salt.cloud.
我正在尝试使用 python 检查模块检查源代码。我在本例中检查的代码示例是: class xxx: def __init__(self): pass def xxxm
我正在尝试对嵌套函数(函数内部的函数)进行单元测试,我正在使用下面链接中的代码(“嵌套”是函数名称),它将提供闭包并返回可从测试中调用的有效函数。它适用于简单的功能。我试图让它适用于递归函数。 举个例
我对基于 https://stackoverflow.com/a/10303539/4113228 的代码片段有疑问 当我尝试编译时: import types dynf = types.Functi
在我的代码中,我需要检测变量是否是函数并对其执行一些操作。 一切都很顺利,直到我现在使用 functools 创建了一个部分函数,突然我的一些测试失败了: import types import
如果是直接调用函数,可以通过以下代码获取Function类型。 Function * fun = callInst->getCalledFunction(); Function * funTyp
我们可以转换llvm::FunctionType的对象转换为 C/C++ 风格的函数原始指针? C/C++ 风格的函数原始指针示例:uint64_t (*funPtr)(uint64_t* args)
使用 types.FunctionType 有哪些缺点或好处?对比typing.Callable作为类型提示注释? 考虑以下代码... import types import typing def f
免责声明:我知道我正在做的事情可能永远永远不会在真实程序中完成。 我最近刚刚了解了 python 的 types.CodeType 和 types.FunctionType,这让我对通过这些类手动创建
我是一名优秀的程序员,十分优秀!