Function Can';t访问Python函数作为属性

Function Can';t访问Python函数作为属性,function,class,attributes,python-2.x,Function,Class,Attributes,Python 2.x,假设我有以下test.py文件 import foo class example1(object): MyFunc = foo.func foo.py在哪里 def func(): return 'Hi' 然后我写另一个文件 import test test.example1.MyFunc() 并获取错误“必须使用example1实例作为第一个参数调用unbound method func()(而不是获取任何内容)” 如何将函数func用作类example1的属

假设我有以下test.py文件

import foo

class example1(object):
      MyFunc = foo.func
foo.py在哪里

def func():
      return 'Hi'
然后我写另一个文件

import test

test.example1.MyFunc()
并获取错误“必须使用example1实例作为第一个参数调用unbound method func()(而不是获取任何内容)”


如何将函数func用作类example1的属性?

以下内容在Python 2.7中适用:

类定义中缺少
\uuuu init\uuuu()
方法

foo.py的定义如下:

def func():
      return 'Hi'
import foo

class example1():
    def __init__(self):
        self.MyFunc = foo.func
该类应定义如下:

def func():
      return 'Hi'
import foo

class example1():
    def __init__(self):
        self.MyFunc = foo.func
然后,当您想要从类中调用属性时,您应该首先实例化它。tester.py脚本应如下所示,例如:

import tester

testerInstance = tester.example1()

testerAttribute = testerInstance.MyFunc()
print testerAttribute

这是一个Python2问题。将
test.py
更改为以下内容,它就会工作

import foo

class example1(object):
    MyFunc = staticmethod(foo.func)
请注意,如果在显示时保持
test.py
,则以下操作有效:

test.example1.__dict__['MyFunc']()
这与Python中访问函数属性的方式有关。如果你感到好奇,就看一看

这是一本书。及


这个问题的技术性正在发展

您的问题是一个特定于python 2的问题。Python3中不推荐使用类型
unbound方法
。因此,您的代码适用于python 3。以下是一个关于以下内容的被广泛接受的答案:。在Python2中调用未绑定方法需要相应类类型的实例

这里有一些解决方案。另一个是,您可以这样定义您的函数:

def func(object):
    return "Hi"
因为这是把object作为它的第一个参数。现在您可以编写以下代码:

test.example1().MyFunc()

上述错误是Python2特有的。