Python:将方法作为函数参数传递时的属性错误

奥斯汀·谢隆

我确信在堆栈溢出的某个地方会有这个问题的答案,但是我一直找不到。它们中的大多数是关于将函数而不是方法作为函数的参数传递的。

我目前正在使用Python 2.7.5,并且正在尝试定义如下函数:

def func(object, method):
    object.method()

当这样调用时:

some_object_instance = SomeObject()
func(some_object_instance, SomeObject.some_object_method)

使用这样定义的类:

class SomeObject:
    def some_object_method(self):
        # do something

基本上等同于执行此操作:

some_object_instance.some_object_method()


但是,我不断遇到属性错误-类似

'SomeObject' has no attribute 'method'

我的印象是,我可以合法地将方法作为参数传递,并在以上述方式使用时正确评估它们。我想念什么?

阿巴内特

这不是方法调用的工作方式。foo.bar语法查找的方法命名 bar上的foo对象。如果已经有了该方法,则只需调用它即可:

def func(object, method):
    method(object)

func(some_object_instance, SomeObject.some_object_method)

SomeObject.some_object_method所谓的“未绑定方法”:它是没有self绑定到其中的方法对象,因此您必须显式地将其传递self给它。

举一个具体的例子,这可能更有意义:

>>> s = 'ABC'
>>> s_lower = s.lower # bound method
>>> s_lower()
'abc'
>>> str_lower = str.lower # unbound method
>>> str_lower(s)
'abc'

相比之下,它some_object_instance.some_object_method是一个“绑定方法”,您可以按原样调用它,并且some_object_instance已经作为self参数“绑定了”

def func2(method):
    method()
func2(some_object_instance.some_object_method)

未绑定的方法在本教程中没有详细说明;有关绑定方法的部分将介绍它们因此,您必须转到参考手册以获取文档(在[标准类型层次结构](https://docs.python.org/2/reference/datamodel.html#the-standard-type-hierarchy)中,小节“用户定义的方法”),对于新手来说可能有点令人生畏。


就我个人而言,直到我了解了它的工作原理后,我才真正了解到它。大约一年前,我写了一篇博客文章方法如何工作的,试图向其他人解释它(但是在Python 3.x术语中,这略有不同)。它可能会有所帮助。真正获得它,您必须通读Descriptor HOWTO,它可能需要一些通读和交互式解释器中的许多操作才能真正被点击,但是希望您能够在进入之前理解方法背后的基本概念。那一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将类方法作为函数参数传递

来自分类Dev

将方法作为函数参数传递

来自分类Dev

将函数作为参数传递给方法

来自分类Dev

为什么将指针作为函数参数传递时出现分段错误?

来自分类Dev

当方法需要类型时尝试将Type作为参数传递时发生C#错误

来自分类Dev

将IO.DirectoryInfo属性作为参数传递给函数?

来自分类Dev

将属性作为参数传递

来自分类Dev

将属性作为参数传递

来自分类Dev

将函数作为参数传递

来自分类Dev

将函数作为参数传递

来自分类Dev

将构造函数作为参数值传递时,jquery数据方法如何工作?

来自分类Dev

将结构指针作为函数参数传递(Seg错误未知)

来自分类Dev

将函数作为其他函数python中的参数传递

来自分类Dev

在悬停时将函数作为参数传递不起作用

来自分类Dev

将 SKNode 作为函数参数传递时出错

来自分类Dev

Web api在将*作为输入值传递给api方法参数时给出错误

来自分类Dev

将键传递给函数作为字符串参数时,VBA Excel错误“按参考参数类型不匹配”

来自分类Dev

将键传递给函数作为字符串参数时,VBA Excel错误“按参考参数类型不匹配”

来自分类Dev

将C#类属性作为方法中的参数传递

来自分类Dev

将函数作为道具传递时的ReactJS错误

来自分类Dev

Python:将函数作为参数传递以初始化对象的方法。还是Pythonic?

来自分类Dev

Python,如何将函数作为参数传递给类方法

来自分类Dev

将通道作为函数中的参数传递的不同方法

来自分类Dev

将函数作为参数传递给“ this”的更好方法

来自分类Dev

将参数化的构造函数作为方法引用传递

来自分类Dev

将lambda函数作为参数传递给需要接口的方法

来自分类Dev

将指向类方法的指针作为函数参数传递

来自分类Dev

将指向类方法的指针作为函数参数传递

来自分类Dev

TypeScript-将匿名函数作为方法参数传递

Related 相关文章

  1. 1

    将类方法作为函数参数传递

  2. 2

    将方法作为函数参数传递

  3. 3

    将函数作为参数传递给方法

  4. 4

    为什么将指针作为函数参数传递时出现分段错误?

  5. 5

    当方法需要类型时尝试将Type作为参数传递时发生C#错误

  6. 6

    将IO.DirectoryInfo属性作为参数传递给函数?

  7. 7

    将属性作为参数传递

  8. 8

    将属性作为参数传递

  9. 9

    将函数作为参数传递

  10. 10

    将函数作为参数传递

  11. 11

    将构造函数作为参数值传递时,jquery数据方法如何工作?

  12. 12

    将结构指针作为函数参数传递(Seg错误未知)

  13. 13

    将函数作为其他函数python中的参数传递

  14. 14

    在悬停时将函数作为参数传递不起作用

  15. 15

    将 SKNode 作为函数参数传递时出错

  16. 16

    Web api在将*作为输入值传递给api方法参数时给出错误

  17. 17

    将键传递给函数作为字符串参数时,VBA Excel错误“按参考参数类型不匹配”

  18. 18

    将键传递给函数作为字符串参数时,VBA Excel错误“按参考参数类型不匹配”

  19. 19

    将C#类属性作为方法中的参数传递

  20. 20

    将函数作为道具传递时的ReactJS错误

  21. 21

    Python:将函数作为参数传递以初始化对象的方法。还是Pythonic?

  22. 22

    Python,如何将函数作为参数传递给类方法

  23. 23

    将通道作为函数中的参数传递的不同方法

  24. 24

    将函数作为参数传递给“ this”的更好方法

  25. 25

    将参数化的构造函数作为方法引用传递

  26. 26

    将lambda函数作为参数传递给需要接口的方法

  27. 27

    将指向类方法的指针作为函数参数传递

  28. 28

    将指向类方法的指针作为函数参数传递

  29. 29

    TypeScript-将匿名函数作为方法参数传递

热门标签

归档