Can't access Python function as attribute
假设我有以下test.py文件
1 2 3 4 | import foo class example1(object): MyFunc = foo.func |
Po.Py在哪里
1 2 | def func(): return 'Hi' |
然后我写另一个文件
1 2 3 | import test test.example1.MyFunc() |
并获取错误"unbound method func()必须以example1实例作为第一个参数调用(改为什么都没有)"。
如何使用函数func作为类example1的属性?
您的问题是一个特定于python 2的问题。在python 3中,不推荐使用
这里有一些解决方案。另一个是,您可以这样定义函数:
1 2 | def func(object): return"Hi" |
因为这是以对象为第一个参数。现在您可以编写此代码:
1 | test.example1().MyFunc() |
这是一个Python问题。将
1 2 3 4 | import foo class example1(object): MyFunc = staticmethod(foo.func) |
请注意,如果按照您所展示的方式保留
1 | test.example1.__dict__['MyFunc']() |
这与在Python中访问函数属性的方式有关。如果您感到好奇,请查看描述符。
这是一个相关的问题。另一个
这个问题的技术性在这里得到了发展。
在python 2.7中,以下内容适用于我:
类定义中缺少
foo.py的定义如下:
1 2 | def func(): return 'Hi' |
该类应定义如下:
1 2 3 4 5 | import foo class example1(): def __init__(self): self.MyFunc = foo.func |
然后,当您想要从类中调用属性时,您应该先实例化它。tester.py脚本应该如下所示,例如:
1 2 3 4 5 6 | import tester testerInstance = tester.example1() testerAttribute = testerInstance.MyFunc() print testerAttribute |