属性错误: 'Foo'对象没有属性'max'

AttributeError: 'Foo' object has no attribute 'max'

本文关键字:属性 max Foo 错误 对象      更新时间:2023-10-16

我正在尝试从Python调用c++函数。下面是python的代码:

from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')
class Foo(object):
    def __init__(self):
        self.obj = lib.Foo_new()
    def bar(self):
        lib.Foo_bar(self.obj)
    def max(self,num1,num2):
        lib.Foo_max(self.obj)
f = Foo()
f.bar()
f.max(3,5)

给出的属性错误为:

Hello
Traceback (most recent call last):
  File "Linkcpp.py", line 16, in <module>
    f.max(3,5)
AttributeError: 'Foo' object has no attribute 'max'

请告诉我以上代码的改正处

我的c++代码是foo.cpp:
#include <iostream>
class Foo{
    public:
        void bar(){
            std::cout << "Hello" << std::endl;
        }
        int max(int num1,int num2) 
        {
          // local variable declaration
          int result;
          if (num1 > num2)
            result = num1;
          else
            result = num2;
          return result; 
        }
};
extern "C" {
    int num1;
    int num2;
    Foo* Foo_new(){ return new Foo(); }
    void Foo_bar(Foo* foo){ foo->bar(); }
    int Foo_max(Foo* foo){ return foo->max(num1,num2); }
}

我正在用下面的命令编译c++代码:

g++ -c -fPIC foo.cpp -o foo.o

g++ -shared -Wl,- sonname,libfoo。所以- 0 libfoo。所以foo.o

你混合了制表符和空格。看起来你的Foo类有一个max方法,但实际上,由于你混合了制表符和空格,max的定义实际上嵌套在bar的定义中。

在编辑器中打开"show whitespace",这样下次就可以看到了。如果Python检测到你混合了制表符和空格,使用-tt命令行标志运行Python会给你错误消息,这也有帮助。