我在使用doctest和相对导入时遇到了麻烦.简单的解决方案就是摆脱相对进口.还有其他人吗?
假设我有一个名为example的包,包含2个文件:
example/__init__.py
"""
This package is entirely useless.
>>> arnold = Aardvark()
>>> arnold.talk()
I am an aardvark.
"""
from .A import Aardvark
if __name__ == "__main__":
import doctest
doctest.testmod()
Run Code Online (Sandbox Code Playgroud)
例如/ A.py
class Aardvark(object):
def talk(self):
print("I am an aardvark.")
Run Code Online (Sandbox Code Playgroud)
如果我现在尝试
python example/__init__.py
Run Code Online (Sandbox Code Playgroud)
然后我得到了错误
Traceback (most recent call last):
File "example/__init__.py", line 8, in <module>
from .A import Aardvark
ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud) 我遇到了SWIG,共享指针和继承问题.
我正在创建各种继承的c ++类,使用Boost共享指针来引用它们,然后用SWIG包装这些共享指针来创建python类.
我的问题如下:
f(sA)是期望到A的共享指针的函数
如果我将sB传递给f(),则会引发错误.
我有提升1.40和swig 1.3.40.
以下是5个文件的内容,它们将重现以下问题:
python setup.py build_ext --inplace
python test.py
Run Code Online (Sandbox Code Playgroud)
swig_shared_ptr.h
#ifndef INCLUDED_SWIG_SHARED_PTR_H
#define INCLUDED_SWIG_SHARED_PTR_H
#include <boost/shared_ptr.hpp>
class Base {};
class Derived : public Base {};
typedef boost::shared_ptr<Base> base_sptr;
typedef boost::shared_ptr<Derived> derived_sptr;
void do_something (base_sptr bs);
base_sptr make_base();
derived_sptr make_derived();
#endif
Run Code Online (Sandbox Code Playgroud)
swig_shared_ptr.cc
#include <iostream>
#include "swig_shared_ptr.h"
void do_something (base_sptr bs)
{
std::cout << "Doing something." << std::endl;
}
base_sptr make_base() { return base_sptr(new Base ()); };
derived_sptr make_derived() { return …
Run Code Online (Sandbox Code Playgroud)