属性错误: 'Foo'对象没有属性'max'
AttributeError: 'Foo' object has no attribute 'max'
我正在尝试从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会给你错误消息,这也有帮助。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- <streamsize>C++ 中 numeric_limits::max() 的值
- 黑客级别的Mini-Max Sum
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- Qt Quick-如何仅从c++代码与qml属性交互
- 用概念检查属性的类型
- C++如何将同一类的实例作为属性
- 关于 std::min, std::max 中的比较运算符的混淆
- 按多个属性排序
- 主函数参数的属性
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- C++删除未使用的类属性会导致 std::logic_error
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 属性错误: 'Foo'对象没有属性'max'