小编Ben*_*war的帖子

Doctest和相对进口

我在使用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)

python doctest

19
推荐指数
1
解决办法
2512
查看次数

SWIG,提升共享指针和继承

我遇到了SWIG,共享指针和继承问题.

我正在创建各种继承的c ++类,使用Boost共享指针来引用它们,然后用SWIG包装这些共享指针来创建python类.

我的问题如下:

  • B是A的子类
  • sA是指向A的共享指针
  • sB是指向B的共享指针
  • f(sA)是期望到A的共享指针的函数

  • 如果我将sB传递给f(),则会引发错误.

  • 此错误仅发生在python级别.
  • 在C++级别,我可以毫无问题地将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)

c++ python swig boost shared-ptr

7
推荐指数
2
解决办法
3988
查看次数

标签 统计

python ×2

boost ×1

c++ ×1

doctest ×1

shared-ptr ×1

swig ×1